Spring如何解决循环依赖的?

在这里插入图片描述
假设有两个实例A,B循环依赖。
且作用域都是单例,因为Spring只支持单例的循环依赖。
假设扫描到了A,调用getBean方法,由于是单例,调用getSingleton方法,发现三个缓中都没有A,进入CreateBeanInstance的流程。此时创建的是能够创建A的工厂放进了三级缓存里面,然后执行populateBean的流程,也就是填充A的属性。
填充A的属性遇到了B,调用getBean()一样的流程,到了填充B属性的时候,发现依赖A,调用getBean(A),此时三级缓存的第三级别缓存具有A 的工厂,利用三级缓存获得的工厂生成A,放入到二级缓存同时删除三级缓存的功能工厂,返回给B。此时B创建完成,放到一级缓存同时返回给A。至此,循环依赖解析完成。

注意:Spring仅仅支持单例模式的setter注入。
因为在构造包装类是在注入三级缓存之前,脱离了三级缓存的支持,均不支持循环依赖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章