在Spring中,当两个或多个bean之间存在循环依赖时,解决循环依赖的原理是什么?

提问者:帅平 问题分类:面试刷题
在Spring中,当两个或多个bean之间存在循环依赖时,解决循环依赖的原理是什么?

 您阅读本篇文章共花了: 

1 个回答
离不开天空的云
离不开天空的云
这里spring解决循环依赖主要是通过三级缓存来解决的,也就是利用3个map来实现,具体的原理如下:
1、创建对象A时,首先会检查A是否在一级缓存中,如果在则直接返回A的实例。
2、如果A不在一级缓存中,则会创建一个A的早期引用,并将其放入二级缓存中。
3、接着,Spring会开始创建A对象的实例,并将其放入一级缓存中。
4、在创建A对象的过程中,如果发现A依赖于B,那么Spring会先去创建B对象。
5、创建B对象时,同样会检查B是否在一级缓存中,如果在则直接返回B的实例。
6、如果B不在一级缓存中,则会创建一个B的早期引用,并将其放入二级缓存中。
7、接着,Spring会开始创建B对象的实例,并将其放入一级缓存中。
8、在创建B对象的过程中,如果发现B又依赖于A,那么Spring会从二级缓存中获取A的早期引用,并注入到B中。
9、当A和B的创建过程都完成后,Spring会将A和B的实例放入一级缓存中,并将二级缓存中的早期引用清除。
10、最后,Spring会将A和B的实例注入到彼此的属性中,完成循环依赖的解决。
发布于:7个月前 (09-22) IP属地:四川省
我来回答