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