spring三级缓存解决循环依赖
参考链接:https://blog.csdn.net/m0_67393157/article/details/126116613
spring三级缓存是用来解决循环依赖问题的,目前循环依赖只在属性set注入并且单例的情况下才能解决,构造器注入和多例的循环依赖是无法解决的。
一.spring三级缓存
一级缓存:singletonObjects<ConcurrentHashMap<>>
二级缓存:earlySingletonObjects<HashMap<>>
三级缓存:singletonFactories<HashMap<>>
二.分析步骤
循环依赖示例:
@Service public class AService { private BService bService; public AService() { System.out.println("Aservice 构造方法执行---------"); } public BService getbService() { return bService; } public void setbService(BService bService) { this.bService = bService; } } @Service public class BService { private AService aService; public BService() { System.out.println("bService 构造方法--------"); } public AService getaService() { return aService; } public void setaService(AService aService) { this.aService = aService; } }
当容器初始化加载两个beans时,会造成A,B相互依赖,查看bean生命周期,可以追踪bean循环依赖的解决过程。
三.源码解析