earlySingletonObjects:第二级缓存 , 里面存放的是提前曝光的单例对象;
singletonFactories:第三级缓存 , 里面存放的是要被实例化的对象的对象工厂 。
所以当一个Bean调用构造函数进行实例化后 , 即使属性还未填充 , 就可以通过三级缓存向外暴露依赖的引用值(所以循环依赖问题的解决也是基于JAVA的引用传递) , 这也说明了另外一点 , 基于构造函数的注入 , 如果有循环依赖 , Spring是不能够解决的 。还要说明一点 , Spring默认的Bean Scope是单例的 , 而三级缓存中都包含singleton , 可见是对于单例Bean之间的循环依赖的解决 , Spring是通过三级缓存来实现的 。源码是让我们知其然并且知其所以然的最好参考 , 所以多多阅读源码!
推荐阅读
- 从 Spring Boot 程序启动深入理解 Netty 异步架构原理
- 龙井是不是绿茶,雨前西湖龙井
- 大学生|HR坦言,这2类学生会被直接淘汰,学历都不去看,到底是何原因
- 秦武王死后谁当王 秦武王是怎么死的历史上
- 曹操是个什么样的人?为什么 曹操到底是一个什么样的人呢
- 真是的纪晓岚 纪晓岚传记
- 材质不的各类茶具,明清时期茶具的种类材质是怎样的
- 什么是双重性格 双重性格的原因
- 半壶清茗了相思,高桥银峰绿茶香高味醇汤清叶绿是其怪异的品质特征
- 鲁智深的性格特点是什么