问题

  springboot 启动报错 Bean with name ‘xxxxService‘ has been injected into other beans 

原因

  依赖循环,即我现在有一个ServiceA需要调用ServiceB的方法,那么ServiceA就依赖于ServiceB,并且在ServiceB中有调用ServiceA的方法,就形成了循环依赖。Spring在初始化bean的时候就不知道先初始化哪个,bean就会报错。

  循环依赖是什么?
    Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。
    Bean A → Bean B → Bean A
  更复杂的间接依赖造成的循环依赖如下。
    Bean A → Bean B → Bean C → Bean D → Bean E → Bean A

  循环依赖会产生什么结果?
    当Spring正在加载所有Bean时,Spring尝试以能正常创建Bean的顺序去创建Bean。
    例如,有如下依赖:
      Bean A → Bean B → Bean C
      Spring先创建beanC,接着创建bean B(将C注入B中),最后创建bean A(将B注入A中)。

      但当存在循环依赖时,Spring将无法决定先创建哪个bean。这种情况下,Spring将产生异常BeanCurrentlyInCreationException。

解决办法

1、重构代码,进行解耦
2、在注入bean时,在互相依赖的两个bean上加上@Lazy注解

 

 

 

借鉴地址:https://www.cnblogs.com/renjiaqi/p/15784007.html

 

原文地址:http://www.cnblogs.com/lucky-jun/p/16894962.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性