欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringIOC BeanDeifition

 更新時間:2020年12月15日 10:22:02   作者:宇文大藏  
這篇文章主要介紹了SpringIOC BeanDeifition的相關(guān)資料,幫助大家更好的理解和學習springioc,感興趣的朋友可以了解下

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源碼時,注意到MergedBeanDefinitiongetMergedLocalBeanDefinition方法,而MergedBeanDefition只是Spring中一個抽象的BeanDefition概念,其本質(zhì)上是一個RootBeanDefinition。

MergedBeanDefinition從中文上理解是合并的bean,上文提到BeanDefition中規(guī)范了parentbean,Spring會檢查bean對應(yīng)的BeanDefitione,智能合并beanparentbean。

通過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)文章!

相關(guān)文章

  • JavaWeb中Session對象的學習筆記

    JavaWeb中Session對象的學習筆記

    在WEB開發(fā)中,服務(wù)器可以為每個用戶瀏覽器創(chuàng)建一個會話對象,即session對象,這篇文章就為大家詳細介紹Session對象的定義、實現(xiàn)原理等基礎(chǔ)知識點,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 基于Java實現(xiàn)音樂播放器的示例代碼

    基于Java實現(xiàn)音樂播放器的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java編寫一個簡單的音樂播放器,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • 解決java.net.SocketTimeoutException: Read timed out的問題

    解決java.net.SocketTimeoutException: Read timed out的問題

    這篇文章主要介紹了解決java.net.SocketTimeoutException: Read timed out的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring基于通用Dao的多數(shù)據(jù)源配置詳解

    spring基于通用Dao的多數(shù)據(jù)源配置詳解

    這篇文章主要為大家詳細介紹了spring基于通用Dao的多數(shù)據(jù)源配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下解
    2018-03-03
  • Java?webservice的POST和GET請求調(diào)用方式

    Java?webservice的POST和GET請求調(diào)用方式

    這篇文章主要介紹了Java?webservice的POST和GET請求調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot整合rocketmq實現(xiàn)分布式事務(wù)

    springboot整合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)方法

    這篇文章主要介紹了基于Spring Security的Oauth2授權(quán)實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明

    關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明

    這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java內(nèi)部類詳解

    Java內(nèi)部類詳解

    內(nèi)部類在 Java 里面算是非常常見的一個功能了,在日常開發(fā)中我們肯定多多少少都用過,這里總結(jié)一下關(guān)于 Java 中內(nèi)部類的相關(guān)知識點和一些使用內(nèi)部類時需要注意的點。
    2020-02-02
  • spring單例如何改多例

    spring單例如何改多例

    這篇文章主要介紹了spring單例如何改多例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論