最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringIOC BeanDeifition

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

BeanDefiton是什么?

BeanDefition是Spring對(duì)POJO的抽象,通過(guò)BeanDefition來(lái)更好地創(chuàng)建、管理Bean。

定義 含義
beanClassName bean的類(lèi)名。該屬性并不總是對(duì)應(yīng)著bean真正使用的類(lèi)的名稱(chēng)。bean通過(guò)某個(gè)類(lèi)的靜態(tài)工廠(chǎng)方法生成,那么這beanClassName就是該類(lèi);bean通過(guò)工廠(chǎng)Bean生成,那么這里為null
scope 作用域 singleton 或者 prototype
lazyInit 是否懶加載 BeanFacotry中的Bean默認(rèn)懶加載,ApplicationContext在初始化階段就會(huì)實(shí)例化
dependsOn 所依賴(lài)的bean的名稱(chēng) 在抽象類(lèi)AbstractBeanFacotry中 dependsOn是一個(gè)String數(shù)組,保證這些被依賴(lài)的bean優(yōu)先被實(shí)例化。
factoryBeanName 如果使用factoryBean來(lái)創(chuàng)建bean,這里指定了相應(yīng)的工廠(chǎng)bean的類(lèi)名稱(chēng)
facotryMethodName 工廠(chǎng)方法名稱(chēng),基于類(lèi)的靜態(tài)工廠(chǎng)方法的情況下,結(jié)合beanClassName使用,基于工廠(chǎng)bean的情況下,結(jié)合facotryBeanName使用,如果bean定義下的constructArugmentValues有內(nèi)容,工廠(chǎng)方法會(huì)在被調(diào)用時(shí)使用該屬性
role bean的角色:APPLICATION,SUPPORT,INFRASTRUCTURE。提示框架該bean的角色和重要程度。

AbstractBeanDefition

AbstractBeanDefition是對(duì)BeanDefition的補(bǔ)充,定義了一些公共配置和公共能力,不加以贅述。

全功能的BeanDefiton

RootBeanDefinition

不能設(shè)置parentbean定義,他本身就是根

ChildBeanDefinition

必須設(shè)置parent bean定義,而且必須通過(guò)構(gòu)造函數(shù)指定

GenricBeanDefinition

動(dòng)態(tài)設(shè)置parent bean,也可以不設(shè)置parent beand 相對(duì)更加靈活

MergedBeanDefinition

筆者在閱讀Spring源碼時(shí),注意到MergedBeanDefinitiongetMergedLocalBeanDefinition方法,而MergedBeanDefition只是Spring中一個(gè)抽象的BeanDefition概念,其本質(zhì)上是一個(gè)RootBeanDefinition。

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

通過(guò)getMergedLocalBeanDefinition方法摘要,加深一下理解。

synchronized (this.mergedBeanDefinitions) {
		//mbd->mergedBeanDefinition
		RootBeanDefinition mbd = null;
		RootBeanDefinition previous = null;
		if (mbd == null || mbd.stale) {
			previous = mbd;
      /** bd.getParentName() == null 代表著
      	該beanDefition是一個(gè)RootBeanDefition
        或者該beanDefition是一個(gè)沒(méi)有parentBean的GenricBeanDefition
      **/
			if (bd.getParentName() == null) {
					if (bd instanceof RootBeanDefinition) {
						mbd = ((RootBeanDefinition) bd).cloneBeanDefinition();
					}
					else {
						mbd = new RootBeanDefinition(bd);
					}
			}
      /**該beanDefition是一個(gè)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的詳細(xì)內(nèi)容,更多關(guān)于SpringIOC BeanDeifition的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

印江| 甘肃省| 安多县| 伊宁县| 老河口市| 勐海县| 岑溪市| 莆田市| 津市市| 甘德县| 保康县| 枣阳市| 通州区| 宁明县| 玉田县| 会东县| 米易县| 迭部县| 锦州市| 闽清县| 巫山县| 兰州市| 定兴县| 邵东县| 城步| 新龙县| 旅游| 江华| 凤庆县| 遂川县| 阿鲁科尔沁旗| 买车| 北碚区| 北川| 南乐县| 博乐市| 九龙坡区| 高密市| 松江区| 普格县| 大埔区|