前言
循环依赖是指 Bean 对象循环引用,是两个或多个 Bean 之间相互持有对方的引用,例如DependencyA → DependencyB → DependencyA。
@Component
public class DependencyA {
@Autowired
private DependencyB circB;
}
@Component
public class DependencyB {
@Autowired
private DependencyA circA;
}
//单个对象的自我依赖也会出现循环依赖,但这种概率极低,属于是代码编写错误。
@Component
public class DependencyC {
@Autowired
private DependencyC circC;
}
一、Spring 框架的三级缓存
Spring 框架通过使用三级缓存来解决这个问题,确保即使在循环依赖的情况下也能正确创建 Bean。
Spring 中的三级缓存其实就是三个 Map,如下: