Spring如何解决循环依赖
此篇笔记内容来源于简书 Spring解决循环依赖源码分析,作者简书网名是土豆肉丝盖浇饭,有兴趣可以关注大佬。同时感谢公众号—再见伐木机提供的学习交流群,跟群友一起学习进步(看大佬讨论问题真是一种享受,哈哈)。
1. Spring解决循环依赖前提
1、bean的作用域必须是单例。
2、不能使用构造函数方式注入循环依赖,使用构造函数循环依赖Spring将抛出异常。
注: bean的注入方式有两种: 一是构造函数, 二是字段注入
2. 字段注入循环依赖Spring加载流程图
步骤如下:
1、 向BeanFactory获取A类的bean实例。
2、 A类bean实例化,把未初始化完成的自己放入二级缓存中。
3、A类bean进行构造(populdateBean),触发依赖注入B类实例。
4、向BeanFactory获取B类的bean实例。
5、B类bean实例化,把未初始化完成的自己放入二级缓存中。
6、B类bean进行构造(populdateBean),触发依赖注入A类实例。
7、从二级缓存中获取到未初始化完成的A。
8、B类bean实例进行初始化,返回给第3步A依赖注入B。
9、A类bean实例进行初始化。
10、返回给调用getBean的方法。