Spring核心容器體系結構簡述

讀者從spring5下載,並源碼編譯。這裏推薦IntelliJ IDEA 工具進行操作

1.核心容器簡述

https://github.com/spring-projects/spring-framework.git
https://github.com/spring-projects/spring-framework.git

(1) BeanFactory

Spring Bean 的創建是典型的工廠模式,這一系列的 Bean 工廠,也即 IOC 容器爲開發者管理對象間的依賴關係提供了很多便利和基礎服務,在 Spring 中有許多的 IOC 容器的實現供用戶選擇和使用,其相互關係如下:


其中 BeanFactory 作爲最頂層的一個接口類,它定義了 IOC 容器的基本功能規範,BeanFactory 有三個子類:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。但是從上圖中我們可以發現最終的默認實現類是 DefaultListableBeanFactory,他實現了所有的接口。那爲何要定義這麼多層次的接口呢?查閱這些接口的源碼和說明發現,每個接口都有他使用的場合,它主要是爲了區分在 Spring 內部在操作過程中對象的傳遞和轉化過程中,對對象的數據訪問所做的限制。例如 ListableBeanFactory 接口表示這些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是這些 Bean 是有繼承關係的,也就是每個 Bean 有可能有父 Bean。AutowireCapableBeanFactory接口定義 Bean 的自動裝配規則。這四個接口共同定義了 Bean 的集合、Bean 之間的關係、以及 Bean 行爲。

最基本的 IOC 容器接口 BeanFactory


在 BeanFactory 裏只對 IOC 容器的基本行爲作了定義,根本不關心你的 Bean 是如何定義怎樣加載的。正如我們只關心工廠裏得到什麼的產品對象,至於工廠是怎麼生產這些對象的,這個基本的接口不關心。而要知道工廠是如何產生對象的,我們需要看具體的 IOC 容器實現,Spring 提供了許多 IOC 容器的實現。比如 XmlBeanFactory,ClasspathXmlApplicationContext 等。其中 XmlBeanFactory 就是針對最基本的 IOC 容器的實現,這個 IOC 容器可以讀取 XML 文件定義的 BeanDefinition(XML 文件 中對 bean 的描述) , XmlBeanFactory 是容器中的簡單版, ApplicationContext 應該算容器中的增強版。ApplicationContext Spring 提供的一個高級的 IOC 容器, 它除了能夠提供 IOC 容器的基本功能外, 還爲用戶提供了以下的附加服務。ApplicationContext 接口的實現, 我們看出其特點:

1.支持信息源, 可以實現國際化。 (實現 MessageSource 接口)
2.訪問資源。 (實現 ResourcePatternResolver 接口)
3.
支持應用事件。 (實現 ApplicationEventPublisher 接口)

(2) BeanDefinition

SpringIOC 容器管理了我們定義的各種 Bean 對象及其相互的關係,Bean 對象在 Spring 實現中是BeanDefinition 來描述的,其繼承體系如下:


Bean 的解析過程非常複雜,功能被分的很細,因爲這裏需要被擴展的地方很多,必須保證有足夠的靈活性,以應對可能的變化。Bean 的解析主要就是對 Spring 配置文件的解析。這個解析過程主要通過下圖中的類完成:



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