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

ClassPathXmlApplicationContext的構造函數裏,一部分邏輯是給各個成員變量賦上初始值:dom

而後是執行refresh操做。函數

獲取ConfigurableListableBeanFactory:post

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

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

進入abstractApplicationContext裏看個究竟:3d

loadBeanDefintions方法:xml

進入AbstractXmlApplicationContext的loadBeanDefinitions方法:blog

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

遞歸調用方法AbstractBeanDefinitionReader的loadBeanDefinitions:rem


遞歸調用loadBeanDefinitions,此時這個方法接收的輸入參數成爲了Resource類型:

進入了XmlBeanDefinitionReader.loadBeanDefinitions方法:

開始對Beans.xml文件進行IO操做:

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

使用documentBuilder解析Beans.xml:

countBefore爲0,而後進行registerBeanDefinitions操做:

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

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

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

這就是解析出來的beanDefinition:

在Beans.xml裏的bean定義以下:

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

相關文章
相關標籤/搜索