原文鏈接http://zhhll.icu/2021/01/03/%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的構造
- 呼叫set方法設定Bean的屬性
- 呼叫BeanNameAware的setBeanName()方法
- 呼叫BeanFactoryAware的setBeanFactory()方法
- 呼叫BeanPostProcessor的postProcessBeforeInitialization()方法
- 呼叫InitializingBean的afterPropertiesSet()方法,需要bean實作InitializingBean
- 呼叫自定義的初始化方法(init-method屬性指定該方法)
- 呼叫BeanPostProcessor類的postProcessAfterInitialization()方法
- 呼叫DisposableBean的destory()方法,需要bean實作DisposableBean
- 呼叫自定義的銷毀方法(destory-method屬性指定該方法)
bean的后置處理器
spring提供了兩種后置處理器
- Bean后置處理器 對容器中Bean進行后處理,對Bean進行額外加強
- 容器后置處理器 對IOC容器進行處理,增強容器功能
Bean后置處理器
Bean后置處理器是一種特殊的Bean,這種特殊的Bean并不對外服務,主要負責對容器中的其他Bean執行后處理,例如容器中的目標Bean生成代理等,Bean后處理器會在Bean實體創建成功后,為Bean實體進行進一步的增強處理,實作BeanPostProcessor介面,實作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回傳回去,否則后續無法獲取到bean
注:如果使用BeanFactory作為Spring容器,則必須手動注冊Bean后置處理器,程式必須獲取Bean后置處理器實體,然后手動注冊,
BeanPostProcessor bp = (BeanPostProcessor)beanFactory.getBean("bp");
beanFactory.addBeanPostProcessor(bp);
Person p = (Person)beanFactory.getBean("person");
容器后置處理器
容器后置處理器負責容器本身,實作BeanFactoryPostProcessor介面,實作介面的postProcessBeanFactory方法對Spring容器進行處理,可以對Spring容器進行自定義擴展,
在BeanFactory標準初始化之后呼叫,即所有的BeanDefinition已經保存加載到beanFactory中,但是bean的實體還未創建
public interface BeanFactoryPostProcessor {
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
由于本身的博客百度沒有收錄,博客地址http://zhhll.icu
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263189.html
標籤:Java
