Bean构建之后,可以通过3类方法触发创建后的回调,当然也支持触发销毁后的回调。
这篇文章谈谈初始化触发方法的顺序和销毁时候触发方法的顺序。
直接上代码:
public class DefaultUserFactory implements InitializingBean {
@PostConstruct
public void init() {
System.out.println("@PostConstruct : UserFactory 初始化中...");
}
/**
* 需要外部进行设置
*/
public void initUserFactory() {
System.out.println("自定义初始化方法 initUserFactory() : UserFactory 初始化中...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean#afterPropertiesSet() : UserFactory 初始化中...");
}
}
我们需要明确如下几点:
InitializingBean
是一个接口,需要实现afterPropertiesSet()
方法@PostConstruct
是一个方法注解,方法要求是public
修饰和无返回值void
initUserFactory
是随便定义的一个方法,方法要求同@PostConstruct
,使用的时候,需要通过XML或者注解定义其为构造方法。从顺序来看,依次是:
@PostConstruct
--> InitializingBean
-->initUserFactory
同理,bean销毁的时候也会触发回调:
public class DefaultUserFactory implements DisposableBean {
@PreDestroy
public void preDestroy() {
System.out.println("@PreDestroy : UserFactory 销毁中...");
}
@Override
public void destroy() throws Exception {
System.out.println("DisposableBean#destroy() : UserFactory 销毁中...");
}
public void doDestroy() {
System.out.println("自定义销毁方法 doDestroy() : UserFactory 销毁中...");
}
}
其顺序仍然是:注解 、接口、自定义方法
@PreDestroy
--> DisposableBean
--> doDestroy
不管是实例化时候的回调还是销毁时候的回调,依次都是
注解 --> 接口 --> 自定义方法