SpringBoot循环依赖解决
前言
最近遇到了一个问题,根据idea报错看出了是循环依赖了,导致项目启动失败,下面记录下解决问题的过程
什么是循环依赖
Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。
Bean A → Bean B → Bean A
更复杂的间接依赖造成的循环依赖如下。
Bean A → Bean B → Bean C → Bean D → Bean E → Bean A
解决方案
最有效的解决方式是增加@Lazy注解,延迟加载,先注入代理对象,当首次使用时再创建对象完成注入,代码如下
1 | private SysMetaObjectService sysMetaObjectService; |
其他网上说的直接用@Autowired
注解亦或者是setter注入,发现并不管用,我这里用setter注入加上@Lazy
注解才算管用
总结
发生循环依赖首先考虑是不是设计的有问题,为什么会产生循环依赖,这不符合java的低耦合原则,所以最应该考虑的是不是需要解耦,其他再考虑使用延迟加载等方案