繁体   English   中英

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

[英]Randomness in Spring Bean creation when there is circular bean dependency

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

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

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

  1. Construtor Autowiring + Constructor Autowiring = Bean初始化将始终失败
  2. 构造函数自动装配+成员自动装配=失败取决于初始化顺序(可能是随机的)a。 如果首先初始化具有Constructor自动装配的Bean,则bean初始化将失败。 如果首先初始化具有成员自动装配的Bean,则bean初始化将成功。
  3. 成员自动装配+成员自动装配=即使使用循环依赖,Bean初始化也将始终成功

因此,如果您具有循环依赖性并且自动装配属于类别(2),则可能会观察到随机/失败的循环依赖性解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM