Spring 循环依赖与三级缓存
循环依赖
- 循环依赖为Spring 初始化bean时可能遇到的问题
- 如:A依赖A;A依赖B,B依赖A等
主要场景
/**
属性填充时产生的 循环依赖 spring能够自动解决
**/
@Component
public class AService {
@Autowired
private BService bService;
}
@Component
public class BService {
@Autowired
private AService aService;
}
/**
需要手动解决的 循环依赖
使用@DependsOn产生的循环依赖
找到@DependsOn注解循环依赖的地方,迫使它不循环依赖
多例循环依赖
可以通过把bean改成单例的方式
构造器循环依赖
可以通过使用@Lazy注解解决
**/
@Component
public class AService {
private BService bService;
public AService(BService bService) {
this.bService = bService;
}
}
@Component
public class BService {
private AService aService;
public BService(AService aService) {
this.aService = aService;
}
}
三级缓存解决部分循环依赖