Spring源碼分析(三)容器核心類

摘要:本文結合《Spring源碼深度解析》來分析Spring 5.0.6版本的源代碼。如有描述錯誤之處,歡迎指正。html

 

上一篇文章中,咱們熟悉了容器的基本用法。在這一篇,咱們開始分析Spring的源碼。可是在正式開始熟悉源碼以前,有必要了解一下Spring中最核心的兩個類。緩存

1. DefaultListableBeanFactory

XmlBeanFactory繼承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整個bean加載的核心部分,是Spring註冊及加載bean的默認實現,而對於XmlBeanFactory與DefaultListableBeanFactory不一樣的地方實際上是在XmlBeanFactory中使用了自定義的XML讀取器XmlBeanDefinitionReader,實現了個性化的BeanDefinitionReader讀取,DefaultListableBeanFactory繼承了AbstractAutowireCapableBeanFactory並實現了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。如下是DefaultListableBeanFactory的類圖:函數

從上面的類圖中,咱們能夠清晰地從全局角度瞭解DefaultListableBeanFactory的脈絡。接下來先了解一下上面類圖中各個類的做用。spa

AliasRegistry 定義對alias的簡單增刪改查等操做
SimpleAliasRegistry 主要使用map做爲alias的緩存,並對接口AliasRegistry進行實現
SingletonBeanRegistry 定義對單例的註冊及獲取
BeanFactory 定義獲取bean及bean的各類屬性
DefaultSingletonBeanFactory 對接口SingletonBeanRegistry各函數的實現
HierarchicalBeanFactory 繼承BeanFactory,也就是在BeanFactory定義的功能的基礎上增長了對parentFactory的支持
BeanDefinitionRegistry 定義對BeanDefinition的各類增刪改操做
FactoryBeanRegistrySupport 在DefaultSingletonBeanRegistry的基礎上增長了對FactoryBean的特殊處理功能
ConfigurableBeanFactory 提供配置Factory的各類方法
ListableBeanFactory 根據各類條件獲取bean的配置清單
AbstractBeanFactory 綜合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能
AutowireCapableBeanFactory 提供建立bean、自動注入,初始化以及應用bean的後處理器
AbstractAutowireCapableBeanFactory 綜合AbstractBeanFactory並對接口AutowireCapableBeanFactory進行實現
ConfigurableListableBeanFactory BeanFactory配置清單,指定忽略類型及接口等
DefaultListableBeanFactory 綜合上面全部功能,主要是對Bean註冊後的處理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XmlBeanFactory對DefaultListableBeanFactory進行了擴展,主要用於從XML文檔中讀取BeanDefinition,對於註冊及獲取Bean都是使用從父類DefaultListableBeanFactory繼承的方法去實現,而惟獨與父類不一樣的個性化實現就是增長了XmlBeanDefinitionReader類型的reader屬性。在XmlBeanFactory中主要使用reader屬性對資源文件進行讀取和註冊。htm

2. XmlBeanDefinitionReader

XML配置文件的讀取時Spring的重要功能,由於Spring的大部分功能都是以配置做爲切入點的,那麼咱們能夠從XmlBeanDefinitionReader中梳理一下資源文件讀取、解析及註冊的大體脈絡。首先咱們看看各個類的功能。blog

ResourceLoader 定義資源加載器,主要應用於根據給定的資源文件地址返回對應的Resource
BeanDefinitionReader 主要定義資源文件讀取並轉換爲BeanDefinition的各個功能
EnvironmentCapable 定義獲取Environment方法
DocumentLoader 定義從資源文件加載到轉換爲Document的功能
AbstractBeanDefinitionReader 對EnvironmentCapable、BeanDefinitionReader類定義的功能進行實現
BeanDefinitionDocumentReader 定義讀取Document並註冊BeanDefiniton功能
BeanDefinitionParserDelegate 定義解析Element的各類方法

 

 

 

 

 

 

 經過以上分析,咱們能夠梳理出整個XML配置文件讀取的大體流程,以下圖所示:繼承

 

在XmlBeanDifinitonReader中主要包含如下幾個步驟的處理:接口

1)經過繼承自AbstractBeanDefinitionReader中的方法,來使用ResourceLoader將資源文件路徑轉換爲對應的Resource文件。ci

2)經過DocumentLoader對Resource文件進行轉換,將Resource文件轉換爲Document文件。資源

3)經過實現接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader類對Document進行解析,並使用BeanDefinitionParserDelegate對Element進行解析。

相關文章
相關標籤/搜索