1.spring的循环依赖

循环依赖是指 Bean 对象循环引用,是两个或多个 Bean 之间相互持有对方的引用,例如 CircularDependencyA → CircularDependencyB → CircularDependencyA。


spring设计了三级缓存来解决循环依赖的问题

三级缓存如何解决呢,其实二级缓存就能解决一般的循环依赖但是无法解决AOP的代理的循环依赖。启动项目,IOC容器会将所有要创建的Bean加到一个List中,等待创建,比如先加载到的A,就会先去单例池中getBean("A"),发现单例池中没有,就会去半成品池中也就是二级缓存和三级缓存中找,都找不到的话,就会创建Bean的实例,createBeanInstance("A"),然后填充属性populateBean("A"),发现依赖于B,所以要去三级缓存中getBean("B"),找不到,所以也要创建Bean的实例,也就是createBean,然后添加属性,又要依赖A,所以就造成了循环依赖。三级缓存就是,在createBeanInstance("A"),之后,创建一个ObjectFactory("A"),放在三级缓存中也就是工厂池中,在这里如果有其他的Bean要提前引用的话,可以通过工厂创建代理对象,也可以创建半成品,放在二级缓存中,所以就很好的解决了AOP情况下的循环依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值