bean的生命週期:指bean創建-----初始化----銷燬 的過程
bean的生命週期是由容器進行管理的
我們可以自定義 bean初始化和銷燬 方法: 容器在bean進行到當前生命週期的時候, 來調用自定義的初始化和銷燬方法
第一種方法:
首先在bean上加上init和destory方法
public class Bike {
public Bike(){
System.out.println("構造--------");
}
public void init(){
System.out.println("init-------");
}
public void destory(){
System.out.println("destory-------");
}
}
如果是使用bean.xml配置bean的
<bean id="person" class="cn.enjoy.bean.Bike" init-method="init" destroy-method="destory">
</bean>
啓動類:
注意:bean單實例: 當容器關閉(app.close)的時候,會調用destroy消耗,但是如果bean是多實例: 容器只負責初始化,但不會管理bean, 容器關閉不會調用銷燬方法
關於設置bean單例和多例,參考1.4、@scope註解單例和多例,驗證默認是單例
public class DemoApp {
public static void main(String[] args){
ClassPathXmlApplicationContext app =
new ClassPathXmlApplicationContext("beans.xml");
System.out.println("IOC容器初始化完成");
app.close();
}
}
打印結果
構造--------
init-------
IOC容器初始化完成
destory-------
第二種方法,在配置類中直接配置
@Configuration
public class DemoConfig {
@Bean(initMethod = "init",destroyMethod = "destory")
public Bike bike(){
return new Bike();
}
}
啓動類
public class DemoApp {
public static void main(String[] args){
AnnotationConfigApplicationContext app =
new AnnotationConfigApplicationContext(DemoConfig.class);
System.out.println("IOC容器初始化完成");
app.close();
}
}
第三種方法,實現InitializingBean, DisposableBean
public class Car implements InitializingBean, DisposableBean {
public Car(){
System.out.println("car-------------constroctor");
}
@Override
public void destroy() throws Exception {
System.out.println("car-------------DisposableBean");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("car-------------InitializingBean");
}
}
執行結果
car constro------
InitializingBean
IOC容器初始化完成
DisposableBean
第四種方法:@PostConstruct和@PreDestroy
public class Fly{
public Fly(){
System.out.println("Fly-------------constroctor");
}
@PostConstruct
public void postConstruct() throws Exception {
System.out.println("Fly-------------PostConstruct");
}
@PreDestroy
public void destory() throws Exception {
System.out.println("Fly-------------PreDestroy");
}
}
結果和第三種的效果是相同的
Fly-------------constroctor
Fly-------------PostConstruct
IOC容器初始化完成
Fly-------------PreDestroy