日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring----Bean的生命周期和循环依赖

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring----Bean的生命周期和循环依赖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

循環依賴:

  A類引用了B,B類引用了A,像這種循環著依賴就是循環依賴;

對于這種配置不會報錯

<bean id="instanceA" class="com.zy.entities.InstanceA"><property name="instanceB" ref="instanceB"></property></bean><bean id="instanceB" class="com.zy.entities.InstanceB"><property name="instanceA" ref="instanceA"></property></bean>

對于這種配置會報錯(Error creating bean with name 'instanceA': Requested bean is currently in creation: Is there an unresolvable circular reference?)

<bean id="instanceA" class="com.zy.entities.InstanceA"><constructor-arg name="instanceB" ref="instanceB"></constructor-arg> </bean> <bean id="instanceB" class="com.zy.entities.InstanceB"><constructor-arg name="instanceA" ref="instanceA"></constructor-arg> </bean>

  

在了解生命周期

doGet()方法:

1、解析別名

final String beanName = transformedBeanName(name);

2、從單例緩沖池中獲取對象(第一次獲取不到)

Object sharedInstance = getSingleton(beanName);

3、判斷如果需要創建的bean是原型(非單例),就會拋出異常;

4、判斷當前容器是否有父工廠,(有由父工廠加載)

5、合并bean定義(如果類似下面的這種配置,就需要合并bean定義)

<bean id="xx" class="com.zy.entities.InstanceB" abstract="true"></bean><bean id="xx2" class="com.zy.entities.InstanceA" parent="xx"></bean>

代碼

final RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);

6、調用dependson依賴檢查(比如下面這種配置就會報錯)

@DependsOn("InstanceB")@Beanpublic InstanceA instanceA(){return new InstanceA();}@DependsOn("InstanceA")@Beanpublic InstanceB instanceB(){return new InstanceB();}

6、創建實例,如果是單例,調用

getSingleton(beanName, new ObjectFactory<Object>() {}

?

轉載于:https://www.cnblogs.com/yanxiaoge/p/11481611.html

總結

以上是生活随笔為你收集整理的spring----Bean的生命周期和循环依赖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。