2016-06-13 46 views
2

我們的應用程序廣泛使用Spring Bean,隨機地看到應用程序啓動錯誤,說有圓形Bean依賴關係。但是這個錯誤並不總是會發生,而是在多次重新啓動時產生隨機數。 這裏有什麼可能是隨機性的原因?如果有一個循環依賴爲什麼它不一致失敗/成功?Spring bean創建時的隨機性,當存在圓形bean依賴關係

異常: org.springframework.beans.factory.BeanCurrentlyInCreationException: 錯誤名爲「X」創造豆:當前請求的bean是在 創造:是否有一個無法解決的循環引用?

回答

2

Spring開始初始化bean的過程,並在過程中瞭解循環引用。根據是否使用基於構造函數或基於成員的自動佈線,循環引用可能會也可能不會成功。 如果兩個參與循環依賴鏈類使用可能會出現以下場景構造函數自動裝配或成員自動裝配:

  1. Construtor自動裝配+構造函數自動裝配=豆初始化總是會失敗
  2. 構造函數自動裝配+會員自動裝配=失敗取決於initialzation訂單(可能是隨機的) a。如果具有構造函數自動裝配的Bean首先被初始化,則bean初始化將失敗。 b。如果具有成員自動裝配的Bean首次初始化,則bean初始化將成功。
  3. 會員自動裝配+會員自動裝配=豆初始化將始終即使循環依賴成功

所以,如果你有圓形Dpendency和自動裝配落在類別(2),您可能會發現隨機成功/失敗的循環依賴解析。

+0

感謝您的啓示:-)您是否找到描述此bahaviour的官方消息來源? – Sebastian

相關問題