基本概念
Spring 中的 Bean 的生命周期,指的是 Bean 从创建到销毁的过程。
下面来探究下几个有关 Bean 生命周期配置的属性。
lazy-init
lazy-init 表示延迟加载 Bean,默认在 Spring IoC 容器初始化时会实例化所有在配置文件定义的 Bean,若启用了 lazy-init 则在调用 Bean 时才会去创建 Bean。
定义 Bean:
1
2
3
4
5
|
public class Animals {
public Animals(){
System.out.println( "creating..." );
}
}
|
配置方式如下(以 xml 文件为例):
1
2
3
4
5
6
|
<!-- 表示启用了延迟加载 -->
< bean id = "animals" class = "com.demo.Animals" lazy-init = "true" />
<!-- 不启用延迟加载 -->
< bean id = "animals" class = "com.demo.Animals" lazy-init = "default" />
< bean id = "animals" class = "com.demo.Animals" />
|
调用验证:
1
2
3
4
5
6
|
// 创建容器
String location = ...
ApplicationContext factory = new FileSystemXmlApplicationContext(location);
// 输出结果:
// 若启用了 lazy-init 则输出 creating...,否则无打印信息。
|
depends-on
depends-on 是指指定 Bean 初始化及销毁时的顺序。该属性可以用于标识当前 Bean 初始化之前显式地强制一个或多个 Bean 被初始化。若指定 Bean 的作用域都是 singleton 时,表示该属性指定的 Bean 要在当前 Bean 销毁之前被销毁。
在 Bean 中定义:
1
2
3
4
5
6
7
8
9
10
|
public class BeanOne{
public BeanOne(){
System.out.println( "BeanOne..." );
}
}
public class BeanTwo{
public BeanTwon(){
System.out.println( "BeanTwo..." );
}
}
|
在配置文件中定义:
1
2
|
< bean id = "beanOne" class = "com.demo.BeanOne" lazy-init = "true" depends-on = "beanTwo" />
< bean id = "beanTwo" class = "com.demo.BeanTwo" lazy-init = "true" />
|
调用验证:
1
2
3
4
5
6
|
String location = ...
ApplicationContext factory = new FileSystemXmlApplicationContext(location);
BeanOne beanOne= (BeanOne)factory.getBean( "beanOne" );
// 输出结果:
// BeanTwo...
// BeanOne...
|
观察输出结果,调用 BeanOne 时,Spring 会自动创建 BeanTwo 实例。
init-method & destory-method
当实例化一个 Bean 时,可能需要执行一个初始化操作来确保该 Bean 可用状态。同样地,当不需要 Bean 时,将其从容器中移除时,可能还需要按顺序执行一些清楚工作。
为 Bean 定义初始化和销毁操作,需要使用 init-method 和 destory-method 属性。
定义 Bean
1
2
3
4
5
6
7
8
9
10
11
12
|
// 进入房间后要开灯,离开房间后要关灯
public class Room {
public Room(){
System.out.println( "enter room..." );
}
public void turnOnLights(){
System.out.println( "turn on..." );
}
public void turnOffLights(){
System.out.println( "turn off..." );
}
}
|
在 Xml 文件中配置
1
|
< bean class = "com.demo.Room" init-method = "turnOnLights" destroy-method = "turnOffLights" />
|
在 Ioc 容器中实例化该 Bean,在销毁它
1
2
3
4
5
6
7
8
|
// 实例化 Bean
FileSystemXmlApplicationContext context = ...
// 销毁 Bean
context.registerShutdownHook();
// 输出内容:
// enter room...
// turn on...
// turn off...
|
总结
以上就是本文关于Spring配置使用之Bean生命周期详解的全部内容,希望对大家有所帮助。有什么问题,欢迎大家留言交流讨论。感谢朋友们对服务器之家网站的支持!
原文链接:http://blog.csdn.net/u012420654/article/details/52761391