Bean的生命周期回调
Bean的生命周期回调主要是在Bean对象创建和销毁的过程中会执行一些init和destroy方法,了解不同形式的init和destroy声明方法,以及它们之间的先后执行顺序会有助于我们理解Bean的生命周期过程。下文主要介绍了生命周期回调的各种使用方式,以及在Spring中是如何实现的。
常用的三种形式:
InitializingBean
和DisposableBean
接口,分别实现afterPropertiesSet
和destroy
方法;- JSR-250下的
@PostConstruct
和@PreDestroy
注解; - 在Spring xml文件中声明
init-method
和destroy-method
属性。
不推荐使用InitializingBean、DisposableBean接口,因为可能会导致和Spring高耦和。
多种形式共同作用于一个Bean时,按照如下顺序执行:
- @PostConstruct注解指定的方法;
- InitializingBean接口实现的afterPropertiesSet()方法;
- init-method属性指定的方法;
- @PreDestroy注解指定的方法;
- DisposableBean接口实现的destroy方法;
- destroy-method属性指定的方法。
示例:
public class X implements InitializingBean, DisposableBean {
@PostConstruct
public void postConstruct() {
System.out.println("PostConstruct.....");
}
public X() {
System.out.println("X construct...");
}
@PreDestroy
public void preDestroy() {
System.out.println("PreDestroy.....");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet...");
}
@Override
public void destroy() throws Exception {
System.out.println("destroy...");
}
public void init() {
System.out.println("init...");
}
public void destroyMethod() {
System.out.println("destroyMethod..."