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

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