三级缓存
指的是DefaultSingletonBeanRegistry类中的三个Map
1 | //一级缓存,存放初始化完成的Bean |
spring通过三级缓存来解决循环依赖问题
不含aop的流程图
含aop的流程图
问题
1:使用三级缓存的作用?
在三个级别的缓存中防止的对象是有区别的
一级缓存存放的是:实例化和初始化都完成的对象
二级缓存存放的是:实例化完成、初始化未完成的对象
三级缓存存放的是:实例化和初始化都未完成,存放的是创建bean的匿名内部类(函数是接口ObjectFactory传入)
2:只使用一级缓存?
在并发的情况下,可能取到实例化但是未初始化的对象
3:只使用二级缓存?
三级缓存存放的是生成具体对象的一个匿名内部类,这个类可能是代理类,也可能是普通的实例对象,使用三级缓存就保证了不管是否需要代理,用的都是一个对象