原文鏈接http://zhhll.icu/2021/%E6%A1%86%E6%9E%B6/spring/bean%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/
bean的生命周期
- bean的構造
- 調(diào)用set方法設置Bean的屬性
- 調(diào)用BeanNameAware的setBeanName()方法
- 調(diào)用BeanFactoryAware的setBeanFactory()方法
- 調(diào)用BeanPostProcessor的postProcessBeforeInitialization()方法
- 調(diào)用InitializingBean的afterPropertiesSet()方法,需要bean實現(xiàn)InitializingBean
- 調(diào)用自定義的初始化方法(init-method屬性指定該方法)
- 調(diào)用BeanPostProcessor類的postProcessAfterInitialization()方法
- 調(diào)用DisposableBean的destory()方法繁疤,需要bean實現(xiàn)DisposableBean
- 調(diào)用自定義的銷毀方法(destory-method屬性指定該方法)
bean的后置處理器
spring提供了兩種后置處理器
- Bean后置處理器 對容器中Bean進行后處理樟蠕,對Bean進行額外加強
- 容器后置處理器 對IOC容器進行處理,增強容器功能
Bean后置處理器
Bean后置處理器是一種特殊的Bean屏歹,這種特殊的Bean并不對外服務,主要負責對容器中的其他Bean執(zhí)行后處理之碗,例如容器中的目標Bean生成代理等蝙眶。Bean后處理器會在Bean實例創(chuàng)建成功后,為Bean實例進行進一步的增強處理褪那。實現(xiàn)BeanPostProcessor接口幽纷,實現(xiàn)postProcessAfterInitialization和postProcessBeforeInitialization方法。
public class MyProcessor implements BeanPostProcessor {
/**
* 初始化之前
* @param o
* @param s
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
if(o instanceof Connection){
System.out.println("初始化之前");
}
return o;
}
/**
* 初始化之后
* @param o
* @param s
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
if(o instanceof Connection){
System.out.println("初始化之后");
}
return o;
}
}
這里處理完之后一定要將bean返回回去博敬,否則后續(xù)無法獲取到bean
注:如果使用BeanFactory作為Spring容器友浸,則必須手動注冊Bean后置處理器,程序必須獲取Bean后置處理器實例偏窝,然后手動注冊收恢。
BeanPostProcessor bp = (BeanPostProcessor)beanFactory.getBean("bp");
beanFactory.addBeanPostProcessor(bp);
Person p = (Person)beanFactory.getBean("person");
容器后置處理器
容器后置處理器負責容器本身武学,實現(xiàn)BeanFactoryPostProcessor接口,實現(xiàn)接口的postProcessBeanFactory方法對Spring容器進行處理伦意,可以對Spring容器進行自定義擴展火窒,
在BeanFactory標準初始化之后調(diào)用,即所有的BeanDefinition已經(jīng)保存加載到beanFactory中驮肉,但是bean的實例還未創(chuàng)建
public interface BeanFactoryPostProcessor {
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
由于本身的博客百度沒有收錄熏矿,博客地址http://zhhll.icu