文章目录
Spring 解决循环依赖总结
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖的问题,例如:
- A 依赖 B,B 又依赖 A。
- 或者 A -> B -> C -> A 形成更复杂的依赖链。
Spring 通过以下机制来解决循环依赖问题:
1. 解决循环依赖的核心机制
Spring 主要通过 三级缓存 和 延迟注入 的方式解决循环依赖问题。
1.1 一级、二级、三级缓存的作用
- 一级缓存 (
singletonObjects
):- 存储已经完全初始化且可直接使用的单例对象。
- 初始化完成后,Bean 会被放入一级缓存。
- 二级缓存 (
earlySingletonObjects
):- 存储提前暴露的早期 Bean 实例,用于解决循环依赖问题的性能优化。
- 如果某个 Bean 的早期引用已经被创建并放入二级缓存,则无需从三级缓存中重复调用
ObjectFactory
创建早期引用