當前位置:編程學習大全網 - 源碼下載 - Spring源碼解析(壹)- 容器的基本實現

Spring源碼解析(壹)- 容器的基本實現

Spring使用 基本的JavaBean 來完成以前只可能由EJB完成的事情,是個分層架構。Spring創建bean都需要通過 讀取 、 解析 、 校驗配置文件, 然後註冊創建成Bean。 Spring是壹個Bean容器 , 主要作用是替我們管理bean對象 (簡單的Java類對象的生命周期)。不管框架如何強大,還是需要我們程序員來告訴其壹些必要信息的(比如要 管理的bean對象的類相關信息、是否開啟組件掃描 等),這些我們稱之為對 Spring框架的配置 ,目前主流的配置方式是 通過使用配置文件或註解。

Spring中最核心的兩個類: DefaultListableBeanFactory、XmlBeanDifinitionReader。DefaultListableBeanFactory 是整個bean加載的核心部分,是Spring註冊及加載bean的默認實現 。XmlBeanDefinitionReader 主要使用reader屬性對資源文件進行讀取和註冊。

XML配置文件讀取是Spring中重要的功能,大部分Spring大部分功能都是 以配置作為切入點 。 XmlBeanFactory 繼承自 DefaultListableBeanFactory ,而對於 DefaultListableBeanFactory 不同的地方其實是在 XmlBeanFactory 中使用了自定義的XML讀取器 XmlBeanDefinitionReader ,主要用於從XML文檔中讀取 BeanDefinition, 實現了個性化的 BeanDefinitionReader 讀取, DefaultListableBeanFactory 繼承了 AbstractAutowireCapableBeanFactory 並實現了 ConfigurableListableBeanFactory 以及 BeanDefinitionRegistry 接口。

Spring的配置文件讀取是通過ClasaPathResource進行封裝的 ,如:new ClassPathResource("bean.xml")。在java中, 將不同來源的資源的讀取邏輯抽象成URL ,通過註冊不同的 handler來處理。 壹般handler的類型使用不同的前綴,URL沒有默認定義相對的path路徑,也 沒有提供相關方法對資源進行檢查 ,顧Spring對其內部需要使用到的資源做了屬於自己的抽象結構, 用Resource接口來封裝底層資源。

Resource 接口繼承 InputStreamSource(封裝了任何能返回InputStream的類)。

Resource接口抽象了所有Spring內部使用到的底層資源 ,首先它定義了3個能判斷當前資源狀態的方法: 存在性(exists)、可讀性(isReadable)、是否處於打開狀態(isOpen) 。有了Resource接口便可以對所有資源進行統壹處理。 ClassPathResource 中的實現是通過class或 classLoader 提供的底層方法進行調用。以此完成對配置文件資源的封裝。

當通過Resource相關類完成了對配置文件進行封裝,接下來由 XmlBeanDefinitionReader 完成對配置文件的讀取工作。

XML文件的驗證模式有兩種:DTD、XSD(XML Schema).

DTD即文檔類型定義, 是壹種XML約束模式語言,是XML文件的驗證機制 。是壹種保證XML文檔格式正確的有效方法, 可以通過比較XML文檔和DTD文件來查看文檔是否符合規範,元素和標簽的使用是否正確 。壹個DTD文檔包含:元素的定義規則、元素間關系的定義規則、元素可使用的屬性、可使用的實體或符號規則。 要使用DTD驗證模式需要在XML文件的頭部聲明。

XML Schema語言就是XSD。 ? XML Schema描述了XML文檔的結構。可以用壹個指定的XML Schema來驗證某個XML文檔,以檢查該XML文檔是否符合其要求。也可以 通過XML Schema指定壹個XML文檔所允許的結構和內容 。XML Schema本身也是壹個XML文檔,符合XML語法結構,可以用通用的XML解析器解析它。

使用XML Schema文檔對XML實例進行校驗,要聲明名稱空間和指定該名稱空間所對應的XML Schema文檔存儲位置 。通過schemaLocation屬性來指定名稱空間所對應的XML?Schema文檔的存儲地址(1、名稱空間URL;2、該名稱空間所標識的XML Schema文件地址或URL地址)。

? 另外驗證模式通過 XmlBeanDefinitionReader 中的setValidationMode方法進行設定。而 Spring 用來檢測驗證模式的方法實際上就是判斷是否包含 DOCTYPE ,如果包含就是 DTD ,否則就是 XSD 。

XML文件經過驗證模式,交由DocumentLoader進行解析成對應的 Document。 而解析的過程中存在這麽壹環節:(EntityResolver) 根據聲明去尋找對應的DTD定義,以便對文檔進行驗證認證 。也可以通過setEntityResolver設置DTD定義。EntityResolver它用來接收兩個參數publicId和systemId,xsd格式文件通常publicId為null。而對於不同的驗證模式采用不同的解析器進行解析,並把文件轉換成Document文件,用於提取及註冊bean。

? Document 文件通過 BeanDefinitionDocumentReader 進行內部邏輯處理,並提取root用於作為參數繼續完成BeanDefinition的註冊。

  • 上一篇:君越自適應巡航不可用怎麽回事
  • 下一篇:《微笑面食》有幾集?
  • copyright 2024編程學習大全網