什么是Bean的生命周期
Bean的生命周期指的是Bean创建→初始化→销毁的过程
我们可以自定义Bean初始化和销毁方法
容器在Bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。
初始化与销毁——自定义方法
我们创建一个Bike类
public class Bike {
public Bike() {
System.out.println("Bike 构造方法");
}
public void init() {
System.out.println("Bike init");
}
public void destroy() {
System.out.println("Bike destory");
}
}
通过@Bean将Bike类添加到IOC容器中,并对初始化和销毁方法进行配置
@Bean(initMethod="init",destroyMethod="destroy")
我们对其进行测试
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
ac.close();
程序运行的结果如下:
Bike 构造方法
Bike init
Bike destory
可以看到,Bean的创建过程中首先执行了构造方法,然后调用了初始化方法,当我们调用ac.close()方法时,Bean的destory方法被调用。
需要注意的是:
对于单实例的Bean,可以正常调用初始化和销毁方法
对于多实例的Bean,容器只会负责初始化,但不会管理Bean,容器关闭时不会调用销毁方法
初始化与销毁——实现接口
1、实现InitializingBean接口的afterPropertiesSet()方法,当BeanFactory创建好对象,且把Bean所有属性设置好之后,会调用这个方法,相当于初始化方法。
2、实现DisposableBean的destory()方法,当Bean销毁时,会把单实例Bean进行销毁。
public class Bike implements InitializingBean, DisposableBean {
public Bike() {
System.out.println("Bike 构造方法");
}
//在bean属性全部被设置之后,BeanFactory会调用该方法
public void afterPropertiesSet() throws Exception {
System.out.println("Bike init method");
}
//由BeanFactory在销毁单例时调用
public void destroy() throws Exception {
System.out.println("Bike destroy method");
}
}
初始化与销毁——注解使用
可以使用@PostConstruct、@PreDestroy注解
@PostConstruct:在Bean创建完成,且属于赋值完成后进行初始化,属于JDK规范的注解
@PreDestroy:在Bean将被移除之前进行通知,在容器销毁之前进行清理工作
public class Bike {
public Bike() {
System.out.println("Bike 构造方法");
}
@PostConstruct
public void init() {
System.out.println("Bike init @PostConstruct");
}
@PreDestroy
public void destroy() {
System.out.println("Bike destory @PreDestroy");
}
}