2016-06-13 59 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

相关问题