Spring容器懒加载和多实例(xml方案)

时间:2022-02-12作者:klpeng分类:IT综合浏览:370评论:0

ApplicationContext类被创建后会默认加载全部Bean实例,并且每次调用 getBean(String id)是同一个id时,都是用了一个实例。下面就要添加懒加载和多实例属性来优化。
 下述所使用的样例:
Person类:

package com;

public class Person {
    Person(){
        System.out.println("调用了Person类的构造函数");
    }
}

springtest.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="p1" class="com.Person" ></bean>
</beans>

一、懒加载

 当我们创建ApplicationContext对象时。会默认调用xml内的所有Bean对象。

public class Test1 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("springtest.xml");
    }
}

Spring容器懒加载和多实例(xml方案)

 官方文档见 1.4.4. Lazy-initialized Beans
解决:在配置xml中的Bean加入属性lazy-init="true"

<bean id="p1" class="com.Person" lazy-init="true"></bean>

 再次运行Test1类,则不会输出Hello类构造函数的内容
Spring容器懒加载和多实例(xml方案)

二、多实例

 创建同一个id的对象,只会创建一个实例:

import com.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("springtest.xml");
        Person p1 = (Person)context.getBean("p1");
        Person p2 = (Person)context.getBean("p1");

        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p1==p2);
    }
}

 运行效果:
Spring容器懒加载和多实例(xml方案)

 官方文档见1.5. Bean Scopes
解决:在配置xml中的Bean加入属性 scope="prototype"

    <bean id="p1" class="com.Person" scope="prototype"></bean>

 重新运行Test2类的运行结果:
Spring容器懒加载和多实例(xml方案)

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢