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循环依赖的解决过程。

三.源码解析

 

posted @ 2023-04-14 14:10  乐多多多多多多  阅读(93)  评论(0)    收藏  举报
/* 看板娘 */