?BeanDefinition
org.springframework.beans.factory.config.BeanDefinition
是配置文件<bean>元素標(biāo)簽在容器中內(nèi)部表示形式。
<bean>元素標(biāo)簽擁有class、scope、lazy-init等配置屬性,
BeanDefinition
則提供了相應(yīng)的beanClass、scope、lazyInit屬性,
BeanDefinition
就像是<bean>的鏡中人,兩者是一一對(duì)應(yīng)的。
BeanDefinition
接口的繼承結(jié)構(gòu)如圖5-2所示。
![]() |
圖5-2? BeanDefinition類繼承結(jié)構(gòu) |
Spring通過(guò) BeanDefinition 將配置文件中的<bean>配置信息轉(zhuǎn)換為容器的內(nèi)部表示,并將這些 BeanDefiniton 注冊(cè)到 BeanDefinitonRegistry 中。Spring容器的 BeanDefinitionRegistry 就像是Spring配置信息的內(nèi)存數(shù)據(jù)庫(kù),后續(xù)操作直接從 BeanDefinitionRegistry 中讀取配置信息。一般情況下, BeanDefinition 只在容器啟動(dòng)時(shí)加載并解析,除非容器刷新或重啟,這些信息不會(huì)發(fā)生變化,當(dāng)然如果用戶有特殊的需求,也可以通過(guò)編程的方式在運(yùn)行期調(diào)整 BeanDefinition 的定義。
創(chuàng)建最終的 BeanDefinition 主要包括兩個(gè)步驟:
1)利用 BeanDefinitionReader 對(duì)配置信息 Resource 進(jìn)行讀取,通過(guò)XML解析器解析配置信息的DOM對(duì)象,簡(jiǎn)單地為每個(gè)<bean>生成對(duì)應(yīng)的 BeanDefinition 對(duì)象。但是這里生成的 BeanDefinition 可能是半成品,因?yàn)樵谂渲梦募?,我們可能通過(guò)占位符變量引用外部屬性文件的屬性,這些占位符變量在這一步還沒(méi)有被解析出來(lái)。
2)利用容器中注冊(cè)的 BeanFactoryPostProcessor 對(duì)半成品的 BeanDefinition 進(jìn)行加工處理,將以占位符表示的配置解析為最終的實(shí)際值,這樣半成品的 BeanDefinition 就為成品的 BeanDefinition 。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
