Java Spring Beans.xml裡的Bean定義是如何被解析出來的

i042416發表於2020-08-02

ClassPathXmlApplicationContext的建構函式裡,一部分邏輯是給各個成員變數賦上初始值:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

然後是執行refresh操作。

獲取ConfigurableListableBeanFactory:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

來自Beans.xml的bean,被解析出來後,就儲存在BeanFactory的成員變數beanDefinitionMap裡。

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

那麼Beans.xml裡的bean定義,是如何被解析的呢?

進入abstractApplicationContext裡看個究竟:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

loadBeanDefintions方法:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

進入AbstractXmlApplicationContext的loadBeanDefinitions方法:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

從Beans.xml處讀取並解析bean定義:reader.loadBeanDefinitions(configLocations);


Java Spring Beans.xml裡的Bean定義是如何被解析出來的

遞迴呼叫方法AbstractBeanDefinitionReader的loadBeanDefinitions:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的


Java Spring Beans.xml裡的Bean定義是如何被解析出來的

遞迴呼叫loadBeanDefinitions,此時這個方法接收的輸入引數成為了Resource型別:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

進入了XmlBeanDefinitionReader.loadBeanDefinitions方法:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

開始對Beans.xml檔案進行IO操作:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

將Java IO操作返回的inputSource傳入doLoadDocument:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

使用documentBuilder解析Beans.xml:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

countBefore為0,然後進行registerBeanDefinitions操作:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

在registerBeanDefintions方法裡,通過org.w3c.dom.Element提供的XML API進行解析:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

解析分為preProcess,parseBeanDefinitions和postProcess三個步驟:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

進入這個IF分支,說明在Beans.xml裡找到了一個bean節點:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

這就是解析出來的beanDefinition:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

在Beans.xml裡的bean定義如下:

Java Spring Beans.xml裡的Bean定義是如何被解析出來的

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":


Java Spring Beans.xml裡的Bean定義是如何被解析出來的


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2708663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章