上篇Resource還比較簡單,發現一到BeanFactory開始忽然複雜起來,好像迷宮出現了不少的分支,每一個分支又有又有很是多的分支,有點無從下手。目前大概思路是,主線仍是跟着書走,搞清楚總體流程,在搞清總體流程以前先整理類的大概結構,這是次要任務,在整理過程當中,若是遇到不是很深的知識點看狀況補充,若是遇到好別的參考資料可是又不容易深刻,收集成連接,也許在將來主線上會遇到,能夠回頭細緻讀。html
先看XmlBeanFactory,這個類已通過期,通常用ApplicationContext,可是這個類簡單一些,先做爲入口吧。關於兩者區別參考 Spring中BeanFactory和ApplicationContext的區別java
下面是類圖,能夠看出,由於java單一繼承的緣故,只有藍色一條線是繼承,剩下的都是實現,那麼爲何繼承是走的 aliasRegistry這條線呢?還有,已經有了SimpleAliasRegistry實現了接口,爲何還要 有Bean efinitionRegistry接口,先留作疑問吧,也許後面能搞清楚spring
BeanFactory,看下類的介紹是怎麼說:訪問bean容器的根接口,有子接口ListableBeanFactory和ConfigurableBeanFactory以適用於不一樣的目的。這個接口的實現持有必定數量的bean的定義,factory會返回一個獨立的實例(prototype模式)或者一個單例(比單例模式高級,單例是在工廠範圍內的單例)。實現的方式是beanfactory做爲應用程序組件和配置的的中心註冊表(registry),多數狀況依賴注入(DI)是更好的方式,BeanFactory從配置源載入bean的定義,而後用beans包下的類來裝配bean(一般是xml),但也可能從編碼中直接載入配置,並不限制bean儲存形式。相較於ListableBeanFactory,HierarchicalBeanFactory會檢查父工廠,若是bean在本工廠未找到,則在直接父工廠找,子工廠的bean會覆蓋父工廠的bean。BeanFactory的子類應當儘量的支持標準的生命週期。註釋裏太長下面這段直接複製自 https://blog.csdn.net/onupway/article/details/80156240 (這篇文章給的是高版本的,比我讀的源碼多了點東西,順序大致一致)框架
標準的初始化方法及其順序是:post
能夠觀察到,前面幾個都是Aware開頭的,通常awarexx就是注入對xx的引用,好比BeanNameAware,本身實現這個接口後,再在內部用一個變量保存beanName,由框架調用set方法來注入屬性。後置處理器,有點像AOP,是通用處理方法。而後中間InitializingBean接口爲bean提供了初始化afterPropertiesSet方法,繼承該接口的類,在初始化bean屬性注入完成以後的時候會執行該方法。以上aware跟實現接口,都在必定程度上跟spring耦合,最後,可使用Spring提供的init-method的功能來執行一個bean自定義的初始化方法,這個方法在xml中是定義成bean的屬性,用註解的話能夠用@PostConstruct代替。編碼
Bean容器關閉的時候,銷燬方法流程以下:.net
生命週期參考如下文章pwa
Spring Bean的生命週期 、Spring Bean的生命週期(很是詳細) 、及 深刻理解spring生命週期與BeanPostProcessor的實現原理prototype
ListableBeanFactory: 它能夠枚舉全部的bean實例,而不是客戶端經過名稱一個一個的查詢得出全部的實例,要一次性加載實例的工廠實現這個接口。能夠觀察到內部的方法基本上都是關於Beandefinition的,注意,其中的getBeanNamesForType方法 。僅檢查頂級bean.它不會檢查嵌套的bean.FactoryBean建立的bean會匹配爲FactoryBean而不是原始類型。同樣不會考慮父factory中的bean。非要用能夠經過BeanFactoryUtilsbean 翻譯
HierarchicalBeanFactory: 提供父容器的訪問功能,若是同時實現了HierarchicalBeanFactory,返回值不會考慮父類BeanFactory,只考慮當前factory定義的類.固然也可使用BeanFactoryUtils輔助類來查找祖先工廠中的類。
AutowireCapableBeanFactory :添加autowire功能。註釋裏說這個類是其餘框架的擴展點,不知道爲何。提早看了下在新的ApplicationContext沒有相關類。
ConfigurableBeanFactory:定義BeanFactory的配置。https://blog.csdn.net/u013412772/article/details/80819398
詳細的看這篇文章,講的很細Spring源碼解析 - BeanFactory接口體系解讀 ,源碼裏的註釋都翻譯好了,若是都這麼細緻本身都不用寫筆記了,直接貼連接就行
其餘參考文章
Spring點滴五:Spring中的後置處理器BeanPostProcessor講解