Spring-IOC-重要類

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的讀取。

DefaultListableBeanFactory 類圖

2- 配置文件的封裝類

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

Resource 接口

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


ClassPathResource 類圖

3- 配置解析類

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

XmlBeanDefinitionReader 實(shí)現(xiàn)了XML配置文件讀取的重要功能

XmlBeanDefinitionReader 類圖

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


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è)步驟:

  1. 通過繼承AbstractBeanDefinitionReader中的方法,來使用ResourceLoader將資源文件路徑轉(zhuǎn)換為對(duì)應(yīng)的Resource對(duì)象
  2. 通過持有DocumentLoader實(shí)例對(duì)Resource文件進(jìn)行轉(zhuǎn)換,將Resource文件轉(zhuǎn)換為Document文件
  3. 通過獲取實(shí)現(xiàn)了接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader類對(duì)Document進(jìn)行解析,DefaultBeanDefinitionDocumentReader類中使用BeanDefinitionParserDelegate對(duì)Element進(jìn)行解析。

注:Spring系列源碼分析中的Spring版本為4.2.8release

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,262評(píng)論 6 342
  • Spring容器高層視圖 Spring 啟動(dòng)時(shí)讀取應(yīng)用程序提供的Bean配置信息,并在Spring容器中生成一份相...
    Theriseof閱讀 2,915評(píng)論 1 24
  • 寫在前面:我是直接通過閱讀Spring源碼并參考《Spring技術(shù)內(nèi)幕(第2版)》一書來對(duì)Spring核心設(shè)計(jì)思想...
    EakonZhao閱讀 3,365評(píng)論 2 12
  • 欣欣地,我來了, 懷揣幸福與期望, 愛, 讓我最后瘋狂。 怏怏著,我走了, 帶著無奈和心傷, 痛, 使我感到迷茫。
    熱愛侶行閱讀 268評(píng)論 0 0
  • 這個(gè)故事最開始是東電集團(tuán)的副總裁石崎芳行講給記者聽的。當(dāng)記者談及災(zāi)民問題時(shí),副總裁不禁潸然淚下,提到了上野桑的故事...
    日本故事會(huì)閱讀 352評(píng)論 0 0

友情鏈接更多精彩內(nèi)容