IOC加載BeanDefiniton

詳細(xì)解析:http://cmsblogs.com/?p=2658

image.png

如上代碼所示,Spring中編程使用IOC容器的過程:
1,獲取資源
2,獲取BeanFactory
3,根據(jù)新建的BeanFactory創(chuàng)建一個(gè)BeanDefinitonReader對(duì)象,該Reader對(duì)象為資源的解析器
4,裝載資源
分為三個(gè)步驟:資源定位,裝載 ,注冊(cè)


image.png

doLoadBeanDefinitions(InputSource inputsource,Resource resource)方法執(zhí)行時(shí)序圖如下:


image.png

解析 BeanDefinition 的入口在 DefaultBeanDefinitionDocumentReader 的#parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) 方法。該方法會(huì)根據(jù)命令空間來判斷標(biāo)簽是默認(rèn)標(biāo)簽還是自定義標(biāo)簽,其中:

默認(rèn)標(biāo)簽,由 #parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) 方法來實(shí)現(xiàn)
自定義標(biāo)簽,由 BeanDefinitionParserDelegate 的 #parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) 方法來實(shí)現(xiàn)。
在默認(rèn)標(biāo)簽解析中,會(huì)根據(jù)標(biāo)簽名稱的不同進(jìn)行 import、alias、bean、beans 四大標(biāo)簽進(jìn)行處理。其中 bean 標(biāo)簽的解析為核心,它由 processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) 方法實(shí)現(xiàn)。

processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) 方法,開始進(jìn)入解析核心工作,分為三步:

解析默認(rèn)標(biāo)簽的默認(rèn)標(biāo)簽:BeanDefinitionParserDelegate#parseBeanDefinitionElement(Element ele, ...) 方法。該方法會(huì)依次解析 <bean> 標(biāo)簽的屬性、各個(gè)子元素,解析完成后返回一個(gè) GenericBeanDefinition 實(shí)例對(duì)象。
解析默認(rèn)標(biāo)簽下的自定義標(biāo)簽:BeanDefinitionParserDelegate#decorateBeanDefinitionIfRequired(Element ele, BeanDefinitionHolder definitionHolder) 方法。
注冊(cè)解析的 BeanDefinition:BeanDefinitionReaderUtils#registerBeanDefinition(BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry) 方法。

?著作權(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)容

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