Bean从出生到销毁到底经历了哪些事情呢?如果我们想要在Bean创建或者销毁的时候执行一些自定义的逻辑要怎么做呢?❤️
是什么
- Bean的生命周期指的是
Bean的创建->初始化->销毁的过程 - 由容器管理bean的生命周期
- 我们可以自定义初始化和销毁方法,容器在Bean进行到当前生命周期的时候,调用我们自定义的初始化和销毁方法
详解
- 1)xml配置的方式的时候我们配置个bean 其中有init-method和destroy-method属性,指定自定义的初始化销毁方法。
- 在@Bean注解中指定initmethod和destroymethod
@Bean(initMethod = "init", destroyMethod = "detory")
public Car car(){
return new Car();
}
//Car类
public class Car{
public Car(){
System.out.println("car constructor");
}
public void init(){
System.out.println("car init...");
}
public void detory(){
System.out.println("car detory...");
}
}
单实例:对象创建完成,赋值完成,就会调用init方法。容器关闭的时候就会调用destroy方法
多实例:在获取Bean的时候调用init方法,但是容器不会调用销毁方法
- 通过让Bean实现
InitializingBean(定义初始化逻辑)DisposableBean(定义销毁逻辑)
public class Car implements InitializingBean,DisposableBean{}
- 使用
@PostConstruct: 标识初始化方法@PreDestroy:标识销毁方法
//对象创建并赋值之后调用
@PostConstruct
public void init(){
System.out.println("@PostConstruct...");
}
//容器移除对象之前
@PreDestroy
public void detory(){
System.out.println("@PreDestroy");
}
BeanPostProcessor:Bean的后置处理器,在Bean初始化前后进行一些处理工作
/**
* 后置处理器,实例化前后进行处理工作
*/
public class MyBeanPostProcessor implements BeanPostProcessor{
@Nullable
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization...");
return bean;
}
@Nullable
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization...");
return bean;
}
}