詳解SpringIOC BeanDeifition
BeanDefiton是什么?
BeanDefition是Spring對POJO的抽象,通過BeanDefition來更好地創(chuàng)建、管理Bean。
定義 | 含義 |
---|---|
beanClassName | bean的類名。該屬性并不總是對應(yīng)著bean真正使用的類的名稱。bean通過某個類的靜態(tài)工廠方法生成,那么這beanClassName就是該類;bean通過工廠Bean生成,那么這里為null |
scope | 作用域 singleton 或者 prototype |
lazyInit | 是否懶加載 BeanFacotry中的Bean默認懶加載,ApplicationContext在初始化階段就會實例化 |
dependsOn | 所依賴的bean的名稱 在抽象類AbstractBeanFacotry中 dependsOn是一個String數(shù)組,保證這些被依賴的bean優(yōu)先被實例化。 |
factoryBeanName | 如果使用factoryBean來創(chuàng)建bean,這里指定了相應(yīng)的工廠bean的類名稱 |
facotryMethodName | 工廠方法名稱,基于類的靜態(tài)工廠方法的情況下,結(jié)合beanClassName使用,基于工廠bean的情況下,結(jié)合facotryBeanName使用,如果bean定義下的constructArugmentValues有內(nèi)容,工廠方法會在被調(diào)用時使用該屬性 |
role | bean的角色:APPLICATION,SUPPORT,INFRASTRUCTURE。提示框架該bean的角色和重要程度。 |
AbstractBeanDefition
AbstractBeanDefition是對BeanDefition的補充,定義了一些公共配置和公共能力,不加以贅述。
全功能的BeanDefiton
RootBeanDefinition
不能設(shè)置parentbean
定義,他本身就是根
ChildBeanDefinition
必須設(shè)置parent bean
定義,而且必須通過構(gòu)造函數(shù)指定
GenricBeanDefinition
動態(tài)設(shè)置parent bean,也可以不設(shè)置parent beand 相對更加靈活
MergedBeanDefinition
筆者在閱讀Spring
源碼時,注意到MergedBeanDefinition
和getMergedLocalBeanDefinition
方法,而MergedBeanDefition
只是Spring中一個抽象的BeanDefition
概念,其本質(zhì)上是一個RootBeanDefinition。
MergedBeanDefinition
從中文上理解是合并的bean
,上文提到BeanDefition
中規(guī)范了parentbean
,Spring
會檢查bean
對應(yīng)的BeanDefitione
,智能合并bean
與parentbean
。
通過getMergedLocalBeanDefinition
方法摘要,加深一下理解。
synchronized (this.mergedBeanDefinitions) { //mbd->mergedBeanDefinition RootBeanDefinition mbd = null; RootBeanDefinition previous = null; if (mbd == null || mbd.stale) { previous = mbd; /** bd.getParentName() == null 代表著 該beanDefition是一個RootBeanDefition 或者該beanDefition是一個沒有parentBean的GenricBeanDefition **/ if (bd.getParentName() == null) { if (bd instanceof RootBeanDefinition) { mbd = ((RootBeanDefinition) bd).cloneBeanDefinition(); } else { mbd = new RootBeanDefinition(bd); } } /**該beanDefition是一個ChildBeanDefition**/ else { BeanDefinition pbd; String parentBeanName = transformedBeanName(bd.getParentName()); if (!beanName.equals(parentBeanName)) { pbd = getMergedBeanDefinition(parentBeanName); } else { BeanFactory parent = getParentBeanFactory(); if (parent instanceof ConfigurableBeanFactory) { /遞歸式調(diào)用/ pbd = ((ConfigurableBeanFactory) parent).getMergedBeanDefinition(parentBeanName); } mbd = new RootBeanDefinition(pbd); mbd.overrideFrom(bd); } } return mbd; }
以上就是詳解SpringIOC BeanDeifition的詳細內(nèi)容,更多關(guān)于SpringIOC BeanDeifition的資料請關(guān)注腳本之家其它相關(guān)文章!
- 詳解SpringIOC容器中bean的作用范圍和生命周期
- Spring IOC原理補充說明(循環(huán)依賴、Bean作用域等)
- Spring IOC裝配Bean過程解析
- Spring為IOC容器注入Bean的五種方式詳解
- Spring bean的實例化和IOC依賴注入詳解
- 關(guān)于SpringBoot獲取IOC容器中注入的Bean(推薦)
- spring在IoC容器中裝配Bean詳解
- spring ioc的簡單實例及bean的作用域?qū)傩越馕?/a>
- 淺談springioc實例化bean的三個方法
- 基于springioc bean 的幾個屬性介紹
- 詳解Spring框架---IOC裝配Bean
- Spring IOC:CreateBean環(huán)節(jié)中的流程轉(zhuǎn)換
相關(guān)文章
解決java.net.SocketTimeoutException: Read timed out的問題
這篇文章主要介紹了解決java.net.SocketTimeoutException: Read timed out的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06spring基于通用Dao的多數(shù)據(jù)源配置詳解
這篇文章主要為大家詳細介紹了spring基于通用Dao的多數(shù)據(jù)源配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下解2018-03-03Java?webservice的POST和GET請求調(diào)用方式
這篇文章主要介紹了Java?webservice的POST和GET請求調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03springboot整合rocketmq實現(xiàn)分布式事務(wù)
大多數(shù)情況下很多公司是使用消息隊列的方式實現(xiàn)分布式事務(wù)。 本篇文章重點講解springboot環(huán)境下整合rocketmq實現(xiàn)分布式事務(wù),感興趣的可以了解一下2021-05-05基于Spring Security的Oauth2授權(quán)實現(xiàn)方法
這篇文章主要介紹了基于Spring Security的Oauth2授權(quán)實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明
這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05