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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException(Spring循环依赖问题)

發布時間:2023/12/10 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException(Spring循环依赖问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:問題

最近啟動項目時候,遇到如下報錯

nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'stockReceiptManager': Bean with name 'stockReceiptManager' has been injected

the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.

?

2:分析原因

后來在網上找了半天說是依賴循環,檢查了一下代碼,確實存在循環依賴的現象

spring默認是支持循環依賴,allowCircularRefrence默認為true。也可以手動設置applicationContext.setAllowCircularReferences(false); 產生這個問題原因:in its raw version as part of a circular reference, but has eventually been wrapped.應該是項目中對某個類的方法開啟異步@Async導致

?

3:解釋循環依賴

首先說一下什么是依賴循環,比如:我現在有一個ServiceA需要調用ServiceB的方法,那么ServiceA就依賴于ServiceB,那在ServiceB中再調用ServiceA的方法,就形成了循環依賴。Spring在初始化bean的時候就不知道先初始化哪個bean就會報錯。

由于類A通過構造注入需要類B的實例,而類B通過構造注入需要類B的實例,二者之間相互注入,導致循環引用拋出異常,這是一個典型的先有雞還是先有蛋的故事。所以在使用spring配置類的循環依賴的關系時,應當盡量避免使用構造注入,而是使用setter注入。

public class ClassA {@AutowiredClassB classB; }public class ClassB {@AutowiredClassA classA ; }

?

那如何解決循環依賴,當然最好的方法是重構你的代碼,進行解耦,但是重構不是一時的事情,那就使用下面的方法:

方法一:

<bean id="ServiceDependent1" class="org.xyz.ServiceDependent1" lazy-init="true"><constructor-arg ref="Service"/> </bean><bean id="ServiceDependent2" class="org.xyz.ServiceDependent2" lazy-init="true"><constructor-arg ref="Service"/> </bean>

?

方法二:

在你的配置文件中,在互相依賴的兩個bean的任意一個加上lazy-init屬性。

在你注入bean時,在互相依賴的兩個bean上加上@Lazy注解也可以。

以上兩種方法都能延遲互相依賴的其中一個bean的加載,從而解決循環依賴的問題。

@Autowired@Lazyprivate ClassA classA;@Autowired@Lazyprivate ClassB classB;

?

總結

以上是生活随笔為你收集整理的nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException(Spring循环依赖问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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