营业厅直发 流量领不停 免费包邮送到家-文曦笔记
文曦笔记-致力于技术与精选资源分享
文曦笔记-致力于技术与精选资源分享
文曦笔记-致力于技术与精选资源分享
文曦笔记-致力于技术与精选资源分享

SpringBoot循环依赖如何解决

一、什么是循环依赖

在Spring通过componentScan注解将Bean注入容器的过程中,如果BeanA依赖BeanB,而BeanB又依赖BeanA就会出现问题,Spring将无法决定先创建哪个bean,这种情况下,Spring将产生异常BeanCurrentlyInCreationException

二、如何解决

假设,现在有两个方法互相调用,这时候Spring进行初始化就不知道先加载哪个而报错

public class ClassA {
 
@Autowired
 
ClassB classB;
 
}
 
public class ClassB {
 
@Autowired
 
ClassA classA
 
}

1. 最好的解决方案肯定是重构,对代码进行解耦

2.使用@Lazy注解

通过@Lazy注解使得对象得以延迟加载,初始化时,先对代理对象进行注入,再首次使用时,再创建对象注入

@Component
public class CircularDependencyA {
 
    private CircularDependencyB circB;
 
    @Autowired
    public CircularDependencyA(@Lazy CircularDependencyB circB) {
        this.circB = circB;
    }
}

3.使用Setter/Field注入

通过这种方式,使得依赖在最终使用的时候才进行注入

@Component
public class CircularDependencyA {
 
    private CircularDependencyB circB;
 
    @Autowired
    public void setCircB(CircularDependencyB circB) {
        this.circB = circB;
    }
 
    public CircularDependencyB getCircB() {
        return circB;
    }
}

建议使用2,3方法解决比较方便快捷,当然时间足够肯定重构最好啦

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容