Spring如何解决循环依赖

Spring的循环依赖是Spring容器注入时候的问题,表现形式之一为多个Bean相互依赖,比如A依赖B,B依赖C,C又依赖A,形成闭环

Spring使用三级缓存来解决循环依赖问题

Spring一级缓存存放完成Bean实例,二级缓存存放早期的Bean(还未赋值属性初始化方法),三级缓存存放Bean工厂以及生成代理对象

1、BeanA实例化还没完成属性set和方法初始化,创建BeanA工厂放到3级缓存

2、注入BeanB的时候发现一二三级缓存中都没有BeanB,实例化BeanB并且创建BeanB工厂放入三级缓存

3、发现BeanB需要注入A对象,将三级缓存中的对象A放入二级缓存并且删除三级缓存中的对象A并且注入A对象到自己的属性

4、BeanB完成属性填充执行初始化方法,放入一级缓存并且删除二级缓存中的对象B

5、二级缓存中的BeanA获取到了实例BeanB进行属性填充和方法初始化,放入一级缓存删除二级缓存的BeanA

如果我们的程序出现多次循环依赖问题的话,要先看看我们的编码逻辑有没有问题,编码OK的话审查一下模块之间的关系以及系统架构的一个设计是否存在不合理的地方,尽快优化改进

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值