spring 如何解决循环依赖?

spring 如何解决循环依赖?,第1张

spring 如何解决循环依赖

1、问题:什么叫循环依赖

        Bean A 中引用 Bean B

        Bean B 中应用Bean A

        bean A实例化后会对Bean B属性赋值,发现B并不是完整的Bean,就会对Bean B进行生命周期一系列 *** 作,到了属性赋值的时候 ,发现A也不是完整的Bean,就会形成闭环,循环依赖。

2、答案:实际上spring内部解决了循环依赖,使用的是缓存机制解决的。

3、众所周知,形成循环依赖,就是没有闭环出口导致的,那么添加一个出口就可以解决这个问题,而这个出口就是spring的缓存机制。

4、 一级缓存:存放完整的Bean

        二级缓存:避免多重依赖的情况下,重复创建动态代理(存放动态代理)

        三级缓存:

                a、存放的是函数接口 通过lambda把方法传进去(把bean的实例和bean的名字传进去,aop创建)

                b、不会立即调用(如果在实例化后立即调用的话,所有的aop 不管bean是否循环依赖都会在实例化后创建 proxy,正常的bean,其实spring还是希望遵循生命周期在初始化创建动态代理)

                c、会在ABA(第二次getBean(A)),才会调用三级缓存(如果实现了aop,才去创建动态代理,如果没有实现依然返回bean的实例)

                d、放入二级缓存,避免重复创建动态代理。

               

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5672913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存