spring源碼解析之DefaultListableBeanFactory

DefaultListableBeanFactory是一個成熟的bean工廠,spring中各種ioc容器的實現都是基於它,所以很有必要對它開始研究。

魯迅曾說過,要認識一個類,首先得搞清楚它的繼承體系,和它的初始化過程

繼承體系

DefaultListableBeanFacatory繼承體系
初看這個圖可能會被嚇到,無從入手,但我作爲一個菜鳥在經過學習後發現spring的設計真的很清晰。

下面我會這些接口做一些簡單的介紹,作爲菜鳥,理解可能有不對的地方

  • BeanFactory : 裏面定義的主要行爲是getBean()方法的幾個重載(通過名稱一個一個的查找)
  • ListableBeanFactory: 它對BeanFactory進行了拓展,不在是一個一個的查詢bean,他能提供容器類所有bean的列舉,其定義的行爲,也集中在這方面,如根據type,annotation來獲取所有滿足的bean。在這個接口定義裏面,我們就能接觸到一個重要的概念,那就是BeanDefinition,能實現列舉的基礎就在於,容器會先讀取配置的元數據,封裝成BeanDefinition
  • HierachicalBeanFactory: 它的行爲很簡單,獲取父工廠,這表明它是在說明它的實現類會具備分層的能力,對於在BeanFactory中定義的行爲,若得不到結果,會嘗試去它的父工廠中嘗試。
  • SingletonBeanRegistry:spring很有意思,他把複雜的功能做了清晰的拆分,這個接口是在定義一個註冊機,什麼是註冊機勒?可以把它理解爲一個Map,並提供一組對這個map的操作,這個接口就提供了一個單例註冊的功能。我們通過BeanFactory的getBean時候,它會先到這個註冊機中去拿。
  • ConfigurableBeanFactory:spring對類的命名非常有規律,如這個Configureable開頭,表示提供配置功能,那麼自然會提供一些set行爲,這個接口提供的配置項比較多,如類加載器,屬性編輯器等,這有必要花時間重新開一篇介紹。
  • AutowireCapableBeanFactory: 它拓展了BeanFactory,提供了自動裝配的功能
  • AliasRegitstry:類似前面提到的SingletonBeanRegistry,它也是一個註冊機,註冊name對應的別名
  • BeanDefinitionRegistry:它也是一個註冊機,註冊name對應的BeanDefinition,BeanDefinition是bean初始化的原料,它是重要,它是對一個bean的抽象,這也是一個很妙的設計,就像mybatis對statement的抽象,但是這裏不展開討論
  • FactoryBeanRegistrySupport:對DefaultSingletonBeanRegistry的拓展,在spring中有一種特殊的bean,它就是FactoryBean,他可以看作是一個工廠,對某些類提供特定的初始化過程。當我們定義了一個它的實現類,通過工廠去取的時候,返回的是這個factoryBean的getBean返回的實例,而不是factroyBean本身,假如想獲取它本身,需要加上前綴&

待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章