当存在循环bean依赖时,Spring Bean创建中的随机性

时间:2016-06-13 16:23:26

标签: java spring circular-reference

我们的应用程序广泛使用Spring Beans,我们随机看到应用程序启动错误,说有Round Bean依赖。但是这个错误并不总是发生,而是在多次重启时随机发生。 这里随机性的原因是什么?如果存在循环依赖性,为什么它不会一直失败/成功?

  

例外:   org.springframework.beans.factory.BeanCurrentlyInCreationException:   创建名为“x”的bean时出错:请求的bean当前位于   创作:是否存在无法解析的循环引用?

1 个答案:

答案 0 :(得分:2)

Spring启动初始化bean的过程,并在过程中了解循环引用。根据是使用基于构造函数还是基于成员的自动布线,循环引用可能成功也可能不成功。 如果循环依赖链中涉及的两个类使用Constructor自动装配或成员自动装配,则可能发生以下情况:

  1. Construtor自动装配+构造函数自动装配= Bean初始化将始终失败
  2. 构造函数自动装配+成员自动装配=失败取决于初始化顺序(可能是随机的) 一个。如果首先初始化具有Constructor自动装配的Bean,则bean初始化将失败。 湾如果首先初始化具有成员自动装配的Bean,则bean初始化将成功。
  3. 成员自动装配+成员自动装配= Bean初始化将始终成功,即使使用循环依赖
  4. 因此,如果您具有循环依赖性并且自动装配属于类别(2),则可能会观察到随机/失败的循环依赖关系解析。