Springboot循环依赖

背景

最近在使用Springboot做项目的时候,遇到了一个循环依赖的 问题。那什么是循环依赖呢,常见的一种情形就是在ServiceA中注入了ServiceB,在ServiceB中也注入了ServiceA。这种情况下,导致Spring在初始化的时候,无法决定先创建哪个Bean,从而导致了报错。

解决方案

优化代码

出现循环依赖,很大的可能性是代码的设计问题,导致了类的方法之间的交叉使用。因此,可以考虑优化代码,将公共的方法抽出来单独封装。

使用@Lazy注解

如果没有时间在短时间内重构完成,可以在互相依赖的两个Service上使用@Lazy注解,如下所示

@Component
public class ServiceA {
 
    @Autowired
    @Lazy
    private ServiceB serviceB;

}

使用setter注入

我们还可以使用setter注入。当依赖最终被使用时才进行注入,对当前代码少做修改

@Component
public class ServiceA {
 
    private ServiceB serviceB;
 
    @Autowired
    public void setServiceB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }
    
}
posted on 2019-06-28 09:05  junjiang3  阅读(7871)  评论(0编辑  收藏  举报