BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题

BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题

一、什么是循环依赖呢?

类A依赖类B,类B也依赖类A,这种情况就会出现循环依赖。

Bean A → Bean B → Bean A

上面是比较容易发现的循环依赖,也有更深层次的循环依赖。

Bean A → Bean B → Bean C → Bean D → Bean E → Bean A

二、Spring 的循环依赖

当Spring上下文在加载所有的bean时,会尝试按照他们他们关联关系的顺序进行创建。如果不存在循环依赖时,例如:

Bean A → Bean B → Bean C

Spring会先创建Bean C,再创建Bean B(并将Bean C注入到Bean B中),最后再创建Bean A(并将Bean B注入到Bean A中)。

但是,如果我们存在循环依赖,Spring上下文不知道应该先创建哪个Bean,因为它们依赖于彼此。在这种情况下,Spring会在加载上下文时,抛出一个BeanCurrentlyInCreationException。

当我们使用构造方法进行注入时,会遇到这种情况。因为它是上下文加载就被要求注入。

三、结论

有很多方法可以处理循环依赖关系。首先要考虑的是重新设计你的bean,这样就不需要循环依赖关系:它们通常是可以改进的设计的症状。‎‎但是,如果您绝对需要在项目中具有循环依赖项,则可以按照此处建议的一些解决方法进行操作。

posted @   锅巴编程  阅读(592)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示