深入解读Spring Framework IoC容器(第八弹:Bean的初始化和销毁)
来源:互联网 发布:淘宝买的玉石是真的吗 编辑:程序博客网 时间:2024/06/06 19:07
初始化回调函数
org.springframework.beans.factory.InitializingBean接口,可以让容器在设置好bean的所有必要属性后,执行初始化。InitializingBean接口仅指定了一个方法:void afterPropertiesSet() throws Exception;
如:
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements InitializingBean { public void afterPropertiesSet() { // do some initialization work }}
不过我们一般不使用InitializingBean接口,因为这样会将代码和Spring耦合起来。推荐使用@PostConstruct注解或者指定一个POJO的初始化方法。在XML配置里,使用init-method属性去指定方法名,并且该方法无参数签名。 例如:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean { public void init() { // do some initialization work }}
析构回调函数
org.springframework.beans.factory.DisposableBean接口,可以让容器在销毁bean时回调。 DisposableBean接口也只定义了一个方法:void destroy() throws Exception;
如:
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements DisposableBean { public void destroy() { // do some destruction work (like releasing pooled connections) }}
一般我们不使用DisposableBean接口,因为会与Spring耦合。建议使用@PreDestroy注解或者指定一个普通的方法,但能由bean定义支持。使用destroy-method属性。例如:
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
public class ExampleBean { public void cleanup() { // do some destruction work (like releasing pooled connections) }}
缺省的初始化和析构方法
像上面那样,在XML配置里使用init-method和destroy-method虽然不会和Spring耦合,但是如果每个bean都要这样配置也很麻烦。
我们可以在顶级的 <beans/>
元素中使用default-init-method属性。这个属性的含义是 Spring IOC容器在bean创建和装配的时候会将 init方法作为实例化回调方法。如果类有这个方法,则会在适当的时候执行。
<beans default-init-method="init"></beans>
销毁回调方法也一样,在顶级的<beans/>
元素中使用 default-destroy-method 属性。
最后要注意,Spring容器保证在bean的所有依赖都满足后立即执行配置的初始化回调。就是说初始化回调在原生bean上调用,这个时候任何诸如AOP拦截器之类的将不能被应用。
组合生命周期机制
从上面我们知道了,有三种控制bean生命周期行为的方式:
- InitializingBean和DisposableBean回调接口;
- 在XML配置里使用init-method和destroy-method配置的自定义init()和destroy()方法;
- @PostConstruct和@PreDestroy注解。
如果为同一个bean配置多个生命周期机制,不同的初始化方法,调用顺序如下:
1. @PostConstruct注解
2. InitializingBean的afterPropertiesSet()定义
3. 在XML配置里使用init-method配置的自定义init()方法
析构方法调用顺序也一样:
1. @PreDestroy注解
2. DisposableBean 的 destroy() 定义
3. 在XML配置里使用destroy-method配置的自定义destroy()方法
- 深入解读Spring Framework IoC容器(第八弹:Bean的初始化和销毁)
- 深入解读Spring Framework IoC容器(第一弹:IoC容器和Bean概述)
- 深入解读Spring Framework IoC容器(第六弹:Bean的作用域)
- 深入解读Spring Framework IoC容器(第七弹:不同作用域Bean的依赖)
- 【Spring Framework 深入】—— IoC容器初始化 -> Bean定义资源的Resource定位
- 【Spring Framework 深入】—— IoC容器初始化 -> Bean定义资源的载入解析
- 深入解读Spring Framework IoC容器(第四弹:p命名空间和c命名空间)
- 深入解读Spring Framework IoC容器(第二弹:依赖注入的方式)
- Spring容器中bean的初始化和销毁工作
- 深入解读Spring Framework IoC容器(第三弹:依赖注入配置详解)
- 深入解读Spring Framework IoC容器(第五弹:懒加载)
- spring 容器初始化 bean 和销毁前所做的操作定义方式(InitializingBean ,DisposableBean)
- Spring:源码解读(IOC容器的初始化)
- Spring bean的初始化和销毁
- Spring Bean的初始化和销毁
- Spring Bean的初始化和销毁方式详解(转载)
- 【Spring Framework 深入】—— IoC容器初始化 -> BeanDefinition的注册
- spring初始化和销毁bean
- GNU系列Windows下编译安装的通用步骤
- android 个人笔记本
- 嵌入式linux网络配置
- Android-解析XML(DOM解析,SAX解析,PULL解析)
- #“Machine Learning”(Andrew Ng)#Week 4_3:Examples and Intuition I
- 深入解读Spring Framework IoC容器(第八弹:Bean的初始化和销毁)
- 【Java基础】线程和并发机制
- UVa 422 - Word-Search Wonder
- 使用getline读取一整行
- 获取网络Json格式数据-使用原生态解析Json
- java基础练习 字符串对比
- 简单的js计算器
- 欢迎使用CSDN-markdown编辑器
- photoshop第九章:文字和场景效果的制作