Spring3中Bean的加載解析


Spring最重要的功能就是管理和加載我們需要的對象,在Spring中稱爲Bean,那麼Spring是如何有序的管理這些對象的呢?

IOC容器的結構

Spring要管理我們的對象,那他總得有個地方來存放它,那它是如何存放的呢?有沒有可能就一個Map<String, Object>,然後beanName作爲Key,Bean實例作爲Value呢?應該不會這麼簡單吧?單事實上Spring就是這麼存放的,只不過它在此基礎上還多了一些別的步驟。Spring3中已經支持註解掃描了,但是最重要的還是XML配置文件,通過這些XML配置文件,可以告訴Spring去加載哪些對象以及它們之間的關係。關於IOC容器,有兩個非常重要的類是一定要介紹一下的,分別是DefaultListableBeanFactory和XmlBeanDefinitionReader。

DefaultListableBeanFactory

包括XmlBeanFactory在類的多個BeanFactory繼承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整個bean加載的核心部分,是Spring註冊以及加載bean的默認實現,它定義了加載和註冊bean的基本邏輯,後續繼承它的工廠只需要關心如何從XML配置或者其他方式讀取bean的配置即可。


XmlBeanDefinitionReader

XML配置文件的讀取時Spring獲取Bean加載的內容和特性的重要方式,就目前的Spring框架來說,Spring的功能大多都是通過配置文件來實現的,瞭解Spring是如何讀取這些配置文件、解析XML文件對我們是很有幫助的。



Bean的加載

對於XML配置方式來說,Bean的加載基本由XmlBeanDefinitionReader來實現。

// XmlBeanDefinitionReader.java
// loadBeanDefinitions是整個資源加載的切入點	
@Override	
public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {	
	return loadBeanDefinitions(new EncodedResource(resource));	
}


我們進入到這個方法中,會發現這個方法做了以下這些事情

(1)正式上面的代碼中寫的new EncodedResource,它利用這個類來對資源文件進行了封裝,這個資源其實就是之前讀到的XML文件的內容,這裏涉及到一些編碼集處理文檔,XML規範處理問題,但我覺得沒什麼可關心的,因爲這都是一些公共的常用的問題處理方式,他們是一種經驗而不是一種技巧

(2)將resource文件最終轉換爲Document對象

(3)交給註冊機進行註冊

接下來我們來具體看下這幾個方法


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