Spring中Bean的作用域分为单例和多例,默认状态下为单例,Spring可以设置你创建的Bean是一个单实例还是多实例。
单实例如下:
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" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<bean id="User" class="com.wdzl.pojo.User" scope="singleton">
<!-- <property name="list" ref="list"></property>-->
</bean>
</beans>
测试类
@Test
public void content(){
ApplicationContext context =
new ClassPathXmlApplicationContext("User.xml");
User user =context.getBean("User",User.class);
User user1 =context.getBean("User",User.class);
System.out.println(user);
System.out.println(user1);
}
输出:com.wdzl.pojo.User@4f0100a7
com.wdzl.pojo.User@4f0100a7
很明显因为作用越是单例,引用的地址是一样的。
多例如下:
修改xml中国bean的作用越为
<bean id="User" class="com.wdzl.pojo.User" scope="prototype">
<!-- <property name="list" ref="list"></property>-->
</bean>
输出如下:
com.wdzl.pojo.User@56928307
com.wdzl.pojo.User@3899782c
因为作用域为prototype,所以创建了俩个对象。
singleton和prototype的区别
- 作用域为singleton时,加载配置文件时就会创建对象
- 作用域为prototype时,在你getBean的时候才会创建多个对象