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