💡
原文中文,约13700字,阅读约需33分钟。
📝
内容提要
本文从源码角度解析Spring循环依赖的解决过程,重点分析createBean方法中的关键点,包括向三级缓存中添加回调函数和填充属性。
🎯
关键要点
- 本文从源码角度解析Spring循环依赖的解决过程。
- 假设有两个Bean A和B,存在循环依赖。
- 获取Bean时涉及到三级缓存,主要通过getBean方法进行初始化。
- doGetBean方法是Bean初始化的关键,首先尝试从一级缓存获取Bean。
- 如果一级缓存没有找到Bean,则检查是否存在循环依赖。
- 如果Bean是单例,则调用getSingleton方法获取实例,并在其中调用createBean方法。
- getSingleton方法首先从一级缓存查找,如果未找到则查找二级缓存和三级缓存。
- 三级缓存中存储的是创建Bean的回调函数,允许提前引用。
- createBean方法负责Bean的创建过程,包括属性填充和初始化。
- populateBean方法用于填充Bean的属性,涉及到@Autowired注解的处理。
- doResolveDependency方法用于解析依赖,找到匹配的Bean。
- 后续流程中,B对象创建后需要注入A对象,形成循环依赖的解决。
- 最终,A和B对象都成功创建,循环依赖问题得到解决。
🏷️
标签
➡️