spring bean的循环依赖

spirng使用了三级缓存解决循环依赖问题

    /** 一级缓存,存放完整的bean*/
    private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

    /** 三级缓存,存放函数接口*/
    private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

    /** 二级缓存,存放早期bean*/
    private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16);

 

二级缓存的作用:防止多线程中在bean还未创建完成的时候获取到不完整的bean

三级缓存的作用:正常创建aop是在初始化之后,因为循环依赖的bean需要提前创建aop,并且使用了函数接口将创建aop的代码从getBean()中分离出来

posted @ 2022-03-12 17:26  区区致命伤  阅读(50)  评论(0)    收藏  举报