//将实例放入二级缓存里
this.earlySingletonObjects.put(beanName, singletonObject);
//从三级缓存里移除
this.singletonFactories.remove(beanName);
老师,我的看法是(我没有去仔细再看源码,仅仅是从您的讲解中,有些疑问) : 最上面两行代码“是从三级缓存移除该bean,只在二级缓存中保存该bean实例”,这个我能理解。我有疑问的地方是您说防止通过singletonFactory去重复创建bean实例。第一行代码已经放到二级缓存了,就表示下次在二级缓存可以拿到这个bean实例。此时
//如果还没有获取到并且第二个参数为true,为true则表示bean允许被循环引用
if (singletonObject == null && allowEarlyReference) {
//从三级缓存singletonFactories这个ObjectFactory实例的缓存里尝试获取创建此Bean的单例工厂实例}
这段代码它根本进不来啊,就是说它不会去找三级缓存了,所以不存在重复创建的说法啊。想问下这里是还有什么逻辑没讲完全,还是我理解有误。