Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖
在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。
多个 Bean 的依赖关系构成环形链路,例如:
- 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。
- 链条循环: Bean A → Bean B → Bean C → Bean A(三对象及以上形成的闭环)。
- 自我依赖:Bean A 依赖自身(A→A)。
典型示例代码片段:
@Component
public class BeanA
{@Autowiredprivate BeanB beanB;
}@Component
public class BeanB
{@Autowiredprivate BeanA beanA;
}
2、如何解决 Bean 的循环依赖
Spring 通过三级缓存机制解决单例 Bean 的循环依赖问题,具体流程和限制如下:
2.1 三级缓存机制
三级缓存机制在 Spring 源码中由 DefaultSingletonBeanRegistry 类实现,该类定义了三个核心 Map 字段分别对应三级缓存。
视频教程: