bean标签的常用属性scope
2018-03-29 本文已影响0人
打死你的小白兔
五种:
1.singleton:单例模式
singleton(默认值)
在每个Spring IoC容器中一个bean定义只有一个对象实例(共享)。
默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初
始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="com.xxx.xxx" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,
2.prototype:原型模式
允许bean可以被多次实例化(使用一次就创建一个实例) . Spring不能对一个prototype bean的
整个生命周期负责.这就意味着清楚prototype作用域的对象并释放任何prototype bean所持有的
昂贵资源都是客户端的责任。
3.request
4.session
5.global session
初始化bean时机
Spring默认在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化的一
部分,ApplicationContext会自动创建并配置所有的singleton bean.通常情况下这是件好事。
因为这样在配置中有任何错误能立即发现。
Lazy-init 为false,spring容器将在启动的时候报错(比较好的一种方式)
Lazy-init 为true,spring容器将在调用该类的时候出错。
如果scope为prototype, Lazy-init将失去作用
init、destroy
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean
的两个生命周期方法。
public class HelloWorld {
public HelloWorld() {
System.out.println("new instance");
}
public void init() {
System.out.println("init");
}
public void destroy() {
System.out.println("detroy");
}
public void hello() {
System.out.println("哈哈");
}
}
-----------------------------------------------
<bean id="helloWorld" class="com.hw.entity.HelloWorld"
init-method="init" destroy-method="destroy" scope="prototype">
</bean>
---------------------------------------------------------
@Test
public void test001() {
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
helloWorld.hello();
ClassPathXmlApplicationContext applicationContext =
(ClassPathXmlApplicationContext)context;
applicationContext.close();
}