@Lazy注解解决循环依赖和三级缓存的区别

Spring三级缓存解决了哪些循环依赖

1.1 属性-属性

@Service
public class InstanceA {
     @Autowired
    private InstanceC InstanceC;
}

@Service
public class InstanceC {
     @Autowired
    private  InstanceA InstanceA;
}

1.2 先属性-后构造函数

// 解释:就在是创建bean的时候,先创建InstanceA,后创建InstanceB
@Service
public class InstanceA {
    @Autowired
    private InstanceC InstanceC;
}



@Service
public class InstanceC {

    private  InstanceA InstanceA;
    @Autowired
    public InstanceC(InstanceA instanceA) {
        InstanceA = instanceA;
    }
}

2.为什么还需要@Lazy注解去解决循环依赖?

因为spring的三级缓存只能解决上面这两种循环依赖,还有其他的循环依赖无法解决。主要有下面三种情况

@lazy可以用来解决构造器注入这种方式下的循环依赖。

2.1 先构造-后属性

解释:就在是创建bean的时候,先创建InstanceC,后创建InstanceA

@Service
public class InstanceC {

    private  InstanceA InstanceA;
    @Autowired
    public InstanceC(InstanceA instanceA) {
        InstanceA = instanceA;
    }
}

@Service
public class InstanceA {
    @Autowired
    private InstanceC InstanceC;
}

2.2 构造函数-构造函数

@Service
public class InstanceC {

    private  InstanceA InstanceA;
    @Autowired
    public InstanceC(InstanceA instanceA) {
        InstanceA = instanceA;
    }
}

@Service
public class InstanceA {
    private InstanceC InstanceC;
    @Autowired
    public InstanceA(InstanceC instanceC) {
        InstanceC = instanceC;
    }
}

2.3 prototype 类型的循环依赖

@Service
@Scope("prototype")
public class A {
    @Autowired
    private B b;
}

@Service
@Scope("prototype")
public class B {
    @Autowired
    private A a;
}

3.@Lazy注解解决循环依赖的底层原理

@Lazy注解是Spring框架提供的一种解决循环依赖问题的方式。当两个或多个Bean之间存在循环依赖时,可以使用@Lazy注解延迟初始化其中一个Bean,从而打破循环依赖

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值