bean的生命周期
bean->初始化->销毁
- 容器帮我们管理bean的生命周期
- 构造(对象创建)
- 单实例:再容器启动的时候创建对象,销毁时容器会帮我们调用destory
- 多实例:每次获取对象的时候创建对象,容器不会管理这个bean,容器不会调用销毁方法
- 我们可以自定义初始化和销毁方法:容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法
- 指定初始化和销毁方法,初始化的时候需要赋值,销毁的时候关闭一些数据源
- 初始化对象创建完成,并赋值好,调用初始化方法
- 销毁:容器关闭的时候调用销毁方法
@Configuration
@ComponentScan
public class config {
@Bean(value = "feifei",initMethod ="init",destroyMethod = "destory")
public feifei getFeiFei(){
return new feifei();
}
}
- 通过让bean实现disposablebean inital
@Scope("prototype")
@Component("feifei")
public class feifei implements InitializingBean, DisposableBean {
public feifei(){
System.out.println("执行构造方法了");
}
public void init(){
System.out.println("执行 init方法");
}
public void destory(){
System.out.println("destory 方法执行");
}
//bean销毁的时候调用
public void destroy() throws Exception {
}
//bean创建完成,并且在属性填充好之后调用
public void afterPropertiesSet() throws Exception {
System.out.println("init");
}
}
后置处理器
-
beanpostprocessor:bean的后置处理器,是一个接口
-
在bean初始化前后进行一些处理工作
-
接口中有两个方法
-
postProcessBeforeInitialization 在初始化之前
-
postProcessAfterInitialization 在初始化之后
-
@Component
public class mybeanpostprocesser implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println(beanName);
return beanName;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("xiangxiangyyds");
return beanName;
}
}
工作原理:
populateBean();
applyBeanPostProcessorsBeforeInitialization()遍历得到容器中所有的beanpostprocesser执行所有的postProcessBeforeInitialization 一旦返回null 就会跳出循环不再执行后边的beanpostprocesser
invokeinitmethod(beanName,wrappedbean,mbd)执行自定义初始化
applyBeanPostProcessorsAfterInitialization()遍历得到容器中所有的beanpostprocesser执行所有的postProcessAfterInitialization 一旦返回null 就会跳出循环不再执行后边的beanpostprocesser