Bean生命周期

BeanFactroy 中Bean生命周期

Spring 為Bean通過了很多生命周期的回調(diào)方法,允許我們對其進行控制

  • BeanPostProcessor : Bean初始化前后的回調(diào)
     初始化前:Object postProcessBeforeInitialization(Object bean, String beanName)
     
     初始化后:Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
    
  • InstantiationAwareBeanPostProcessor: 拓展BeanPostProcessor,增加實例化時回調(diào)
    實例化前:Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException;
    實例化后:boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException; 如果返回false,別的InstantiationAwareBeanPostProcessor將不會處理這個實例
    設(shè)置屬性:PropertyValues postProcessPropertyValues(
            PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException;
  • InstantiationAwareBeanPostProcessorAdapter: Adapter類,提供結(jié)構(gòu)的默認實現(xiàn)

  • 方法回調(diào)順序

生命周期.PNG

Bean通過xml聲明是通過init-method和destroy-method屬性配置控制初始化,和銷毀,與實現(xiàn)接口InitializingBean與DisposableBean是一樣的,這樣不需要實現(xiàn)Spring的接口,不與Spring耦合。

  • InitDestroyAnnotationBeanPostProcessor
    扶著處理@PostConstruct初始化后 @PreDestroy 銷毀前進行處理。ApplicationContext默認裝載該處理器。

ApplicationContext中Bean 生命周期

捕獲11.PNG

與BeanFactory周期不同的是如果bean實現(xiàn)了ApplictionContextAware,會多調(diào)用一個setApplicationContext方法.

當實現(xiàn)多個BeanPostProcess是,最好實現(xiàn)org.springframework.core.Ordered 對執(zhí)行順序進行控制。
ApplicationContext會利用放射識別出配置中的BeanPostProcess自動注冊到上下文,BeanFactory需要手工進行注冊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容