Spring:IOC中对象的多例和单例
程序员文章站
2024-03-24 17:15:34
...
IOC生成对象的单例和多例
验证bean工厂创建的是不是单例对象
思路:
通过工厂创建两个对象,查看等值比较(对象之间使用等值比较,比较的是对象的真实地址是否相同)的结果
测试代码:
public class ScopeTest extends TestCase {
private BeanFactory factory;
@Override
protected void setUp() throws Exception {
factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
}
public void testScope1() {
//分别创建两个对象
Bean1 bean11 = (Bean1)factory.getBean("bean1");
Bean1 bean12 = (Bean1)factory.getBean("bean1");
//使用==进行验证
if (bean11 == bean12) {
System.out.println("bean11==bean12");
}else {
System.out.println("bean11!=bean12");
}
}
}
执行结果:
bean11==bean12
结论:
bean工厂默认情况下是生成单实例对象的。
生成单实例对象
在xml配置文件中使用 scope=“singleton” 指定bean工厂生成单实例对象:
生成多实例对象
延迟创建
创建bean工厂时,不创建对象。当对象被使用时(通过工厂拿到对象),创建对象,设到IOC容器中。
作用:
bean工厂每次获取对象时返回不同的实例。
在xml配置文件中使用 scope=“prototype” 指定bean工厂生成多实例对象:
使用等值比较进行验证:
bean11!=bean12
我们知道IOC容器实质上是一个map,由于map是无序不可重复的,两个对象的key相同,第二次创建的对象的地址覆盖了value中之前创建的对象的地址。
说明:本文仅用作学习笔记,无其他用途,如有冒犯可联系本人删除