當前位置:編程學習大全網 - 源碼下載 - Spring的生命周期

Spring的生命周期

refresh() 方法中,主要進行的操作有如下幾步:

前三個方法都屬於bean的組裝和環境準備工作。通過對xml和註解的處理把bean的關系進行組裝起來。

invokeBeanFactoryPostProcessors()

在這個方法中完成 BeanDefinitionRegistryPostProcessor 和 BeanFactoryPostProcessor 的創建並且執行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry() 方法和 BeanFactoryPostProcessor 的 postProcessBeanFactory() 方法。

registerBeanPostProcessors(beanFactory);

這倆步可以歸結為壹類就是實例化BeanPostProcessor,調用 beanFactory.getBean(ppName, BeanPostProcessor.class) 方法得到化BeanPostProcessor對象並且放進BeanFactory維護的BeanPostProcessor的集合中,為了後期實例化其他對象使用。

這裏提供了壹個方法,進行容器中是否有BeanPostProcessor的判斷,如果有的話那麽就執行 InstantiationAwareBeanPostProcessor 的 postProcessBeforeInstantiation() 方法。

這個註釋上說是給BeanPostProcessors壹個機會返回代理proxy對象。但是是根據targetSource來創建代理對象

通過獲取構造器然後通過反射的方式來進行Bean的實例化。

這個方法是在進行屬性註入前的壹個補漏工作,因為我們在最開始維護Bean關系的時候,沒有處理過通過註解完成的屬性註入關系,所以要通過這個方法找到例如我們通過@Resource來進行屬性註入的Bean,然後把需要註入的屬性和Bean之間關聯起來。

通過 xml配置 和 執行InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法 ,已經完全組裝好了壹個Bean以及Bean的所有屬性關系。接下裏就是進行屬性註入,根據註入屬性的類型分別通過反射的方式來創建對象。

這倆點都屬於壹個回調方法,讓bean來感知自己在容器中的存在的編號,以及感知自己所屬的是哪個beanFactory。通過這倆個方法我們可以操作已經在beanFactory中實例化的對象。

這裏有壹個彩蛋:如果實現了BeanFactoryAware接口的Bean調用setBeanFactory()方法時,進行了beanFactory.getBean(),通過壹個提前處理的方式來解決循環調用。

用來返回屬性已經填充完全的bean或者是bean的包裝類。

執行初始化方法。

這裏可以生成代理對象,通過 AbstractAutoProxyCreator 類的

postProcessAfterInitialization 方法

創建了 DisposableBeanAdapter 對象放入 disposableBeans 適配了2種不同的銷毀方式提供了壹個統壹的destory的入口。

啟動web容器,可以提供業務處理。

當容器停止的時候,調用 ContextLoaderListener 的 contextDestroyed 方法。執行destory方法

初始化applicationContext,完成維護了整個容器的bean關系的beanFactory創建,實例化BeanFactoryPostProcessor,完成自定義bean的註冊和bean屬性的修改。實例化BeanPostProcessor對象,為後續bean創建過程中提供多個擴展點,如針對目標bena創建代理對象。執行InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法,開始bean的構造,執行InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法解決註解方式的屬性依賴。完成所有對象的屬性註入,依次執行提供針對bean和beanFactory的感知的多個Aware方法。執行BeanPostProcessor的postProcessBeforeInitialization方法,執行afterPropertiesSet()方法和執行init-method方法來做壹些初始化操作,執行BeanPostProcessor的postProcessAfterInitialization方法對有advice增強的對象創建代理對象。創建DisposableBeanAdapter適配destroyMethod和disposableBean,等待容器結束時調用destory方法。進行業務處理,關閉容器,執行destory()方法。

  • 上一篇:微信小程序如何引流
  • 下一篇:為何 NVidia 的開源驅動程序對 Linux 如此重要?
  • copyright 2024編程學習大全網