循环依赖解析

本文介绍了Spring框架如何处理循环依赖问题,包括构造器循环依赖和setter循环依赖。对于构造器依赖,Spring会抛出异常;setter循环依赖则通过提前暴露单例bean的ObjectFactory来解决。此外,Spring无法处理prototype作用域的bean的循环依赖。
摘要由CSDN通过智能技术生成

一、什么是循环依赖

循环依赖就是循环引用,两个或者多个bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则他们最终反映为一个环。

二、Spring是如何解决循环依赖

Spring容器循环依赖包括构造器循环依赖和setter循环依赖

1、构造器循环依赖

通过构造器注入形成的循环依赖,此依赖无法解决,只能抛出BeanCurrentlyInCreationException异常表示循环依赖。

Spring容器将每一个正在创建的bean标识符放在一个“当前创建bean池”中,bean标识符在创建过程中一直保持在这个池子中,因此如果在创建bean过程中发现自己已经在“当前创建bean池”里时。将抛出BeanCurrentlyInCreationException异常表示循环依赖。而对于创建完毕的bean将从“当前创建bean池”中清除掉。

public class CircleA {
    private CircleB circleB;

    public CircleA(CircleB circleB) {
        this.circleB = circleB;
    }

    public void a(){
        circleB.b();;
    }

    public CircleB getCircleB() {
        return circleB;
    }

    public void setCircleB(CircleB circleB) {
        this.circleB = circleB;
    }
}
public class CircleB {

    private CircleC circleC;

    public CircleB(CircleC circleC) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值