Spring IOC的核心是BeanFactory接口的實(shí)現(xiàn)
1- BeanFactory的默認(rèn)實(shí)現(xiàn)類
DefaultListableBeanFactory 是非常關(guān)鍵的類,因?yàn)樗荁eanFactory的默認(rèn)實(shí)現(xiàn),繼承并實(shí)現(xiàn)了多個(gè)類和接口,是beans包中邏輯最為復(fù)雜的類;其他比如XmlBeanFactory等都是對(duì)DefaultListtableBeanFactory的個(gè)性化拓展,通過持有自定義的XML讀取器XmlBeanDefinitionReader實(shí)例,來完成進(jìn)行個(gè)性化的BeanDefinition的讀取。

2- 配置文件的封裝類
InputStreamSource接口封裝了任何能返回InputStream的類,比如File、ClassPath下的資源和ByteArray等。
Resource接口抽象了所有Spring內(nèi)部使用到的底層資源:File、URL、Classpath等,并提供諸多對(duì)文件操作以及狀態(tài)查詢的方法功能。

對(duì)于不同來源的資源文件都有相應(yīng)的Resource接口的不同實(shí)現(xiàn),比如FileSystemResource、ClassPathResource、InputStreamResource等。

3- 配置解析類
BeanDefinitionReader 接口定義了配置文件讀取的重要功能,BeanFactory通過持有此reader實(shí)例對(duì)配置進(jìn)行解析。
XmlBeanDefinitionReader 實(shí)現(xiàn)了XML配置文件讀取的重要功能

XmlBeanFactory是通過持有很多重要的實(shí)例來完成配置文件的讀取

類中包含的實(shí)例:
- ResourceLoader:定義資源加載器,主要解析資源文件的地址然后返回對(duì)象的對(duì)這個(gè)地址文件封裝的Resource對(duì)象
- BeanDefinitionReader:定義讀取Resource對(duì)象內(nèi)容并轉(zhuǎn)換為BeanDefinition的各種功能
- EnvironmentCapable:定義獲取Environment對(duì)象的方法,Environment對(duì)象是對(duì)系統(tǒng)環(huán)境變量操作的封裝
- DocumentLoader:定義加載Resource對(duì)象,轉(zhuǎn)換為Document對(duì)象的功能
- AbstractBeanDefinitionReader:對(duì)EnvironmentCapable、BeanDefinitionReader的實(shí)現(xiàn)
- BeanDefinitionDocumentReader:定義讀取Document對(duì)象,并注冊(cè)BeanDefinition的功能
- BeanDefinitionParseDelegate:定義解析Element的各種方法
XMLBeanDefinitionReader 解析加載的過程大致分為以下三個(gè)步驟:
- 通過繼承AbstractBeanDefinitionReader中的方法,來使用ResourceLoader將資源文件路徑轉(zhuǎn)換為對(duì)應(yīng)的Resource對(duì)象
- 通過持有DocumentLoader實(shí)例對(duì)Resource文件進(jìn)行轉(zhuǎn)換,將Resource文件轉(zhuǎn)換為Document文件
- 通過獲取實(shí)現(xiàn)了接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader類對(duì)Document進(jìn)行解析,DefaultBeanDefinitionDocumentReader類中使用BeanDefinitionParserDelegate對(duì)Element進(jìn)行解析。
注:Spring系列源碼分析中的Spring版本為4.2.8release