前面已经写了关于三篇循环依赖的文章, 这是一个总结篇
第一篇: 3.1 spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖
第二篇: 3.2spring源码系列----循环依赖源码分析
第三篇: 3.3 Spring5源码---循环依赖过程中spring读取不完整bean的最终
现在总结循环依赖的思想
思想才是我们可以在工作中借鉴使用的
1. 循环依赖的三级缓存设计
2. 接口函数
一. 循环依赖的三级缓存设计
再循环依赖的过程中设计了三级缓存, 他们的作用分别是
1. 一级缓存: 用来存放完整的bean
2. 二级缓存: 用来存放早期的,纯净的bean
3. 三级缓存: 用来存放接口函数.
/** Cache of singleton objects: bean name to bean instance. */ /** * 一级缓存 这个就是我们大名鼎鼎的缓存池, 用于保存我们所有的实例bean */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); /** Cache of singleton factories: bean name to ObjectFactory. */ /** * 三级缓存 该map用户缓存key为beanName, value为objectFactory(包装为早期对象) */ private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16); /** Cache of early singleton objects: bean name to bean instance. */ /** * 二级缓存, 用户缓存我们的key为beanName, value是我们的早期对象(此时对象属性还没有...) */ private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);