循环依赖问题

文章讲述了循环依赖的三种类型,并重点分析了在处理对象A和B相互依赖时,使用二级缓存导致的死循环问题。为了解决这个问题,文章提出了使用三级缓存的策略,将实例化和属性注入分开,确保在注入过程中能获取到对象,从而避免死循环的发生。
摘要由CSDN通过智能技术生成

(1)循环依赖分类

循环依赖一共分为三类,如下图所示:

在这里插入图片描述

(2) 循环依赖解决办法

使用三级缓存。

在这里插入图片描述

(3)使用三级缓存的原因

假设两个对象A和B相互依赖。

如果使用二级缓存,等同于第二级缓存必须完成实例化和属性注入,两者构成一个事务,换句话说属性注入和实例化同时完成,对象才存在。这样就出现了一个问题,A中需要注入B对象的时候,A需要向IOC容器getBean(B),此时发现B对象并不存在,因此需要构造B对象,同样的实例化和属性注入过程,当B中需要注入A对象的时候,B需要向IOC容器getBean(A),此时发现A对象也并不存在,这样就形成了死循环。

如果使用三级缓存:将实例化和属性注入分开,实例化之后对象就会存在,只不过此时的对象并没有完成属性注入和初始化(赋值),此时的对象是一个完成三分之一的残次品,属性注入完成之后,就得到半残次品对象Bean,初始化之后才会得到一个完整的Bean。使用三级缓存,在属性注入的时候,需要注入其他对象时,至少能找到对方的对象,这样也就解决了死循环的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值