Spring对象的作用域
* 在配置文件中,scope为 "singleton" * 默认值 * spring产生的bean只有一个实例 * 处于单例模式的bean的创建、初始化、销毁都是受spring容器管理的
·
* 在配置文件中,scope为
"singleton"
* 默认值
* spring产生的bean只有一个实例
* 处于单例模式的bean的创建、初始化、销毁都是受spring容器管理的
* 在容器关闭的时候执行销毁工作
"prototype"
* 多例
* spring容器负责该bean的创建、初始化,但是销毁工作程序员做
* 无论该bean的lazy-init为什么值,都在context.getBean时创建对象
* 如果该bean中有资源对象,手动关闭
<?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
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!--
scope决定bean的范围
singleton 单例 默认
prototype 原型 多例
-->
<bean id="helloWorld" class="cn.itcast.spring01.scope.HelloWorld" scope="prototype"></bean>
</beans>
public class ScopeTest {
/**
* 由spring容器产生的bean默认是单例模式
* 在spring的配置文件中:
* scope:
* singleton 默认的形式
* 如果写默认的形式,一个集合或者一个数据出现在了类的属性中,这个数据将成为全局的数据(共享数据),应该
* 注意并发问题
* 当spring容器中的bean是多例,则不管配置文件中的lazy-init为default、false还是true,在
* context.getBean时才要为bean创建对象
*/
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("cn/itcast/spring0401/scope/applicationContext.xml");
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
helloWorld.s.add("aaa");
helloWorld.s.add("bb");
HelloWorld helloWorld1 = (HelloWorld)context.getBean("helloWorld");
helloWorld1.s.add("cc");
System.out.println(helloWorld.s.size());
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)