欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring:IOC中对象的多例和单例

程序员文章站 2024-03-24 17:15:34
...

验证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工厂生成单实例对象

Spring:IOC中对象的多例和单例

生成多实例对象

延迟创建

创建bean工厂时,不创建对象。当对象被使用时(通过工厂拿到对象),创建对象,设到IOC容器中。

作用:
bean工厂每次获取对象时返回不同的实例。

在xml配置文件中使用 scope=“prototype” 指定bean工厂生成多实例对象

Spring:IOC中对象的多例和单例
使用等值比较进行验证:

bean11!=bean12

Spring:IOC中对象的多例和单例

我们知道IOC容器实质上是一个map,由于map是无序不可重复的,两个对象的key相同,第二次创建的对象的地址覆盖了value中之前创建的对象的地址。

说明:本文仅用作学习笔记,无其他用途,如有冒犯可联系本人删除