三级缓存的类--DefaultSingletonBeanRegistry
注意:
缓存详解
-
一级缓存
-
二级缓存
-
三级缓存
创建过程(源码自行debug)
为什么不用二级或一级
使用三级缓存而非二级缓存并不是因为只有三级缓存才能解决循环引用问题,其实二级缓存同样也能很好解决循环引用问题。使用三级而非二级缓存并非出于IOC的考虑,而是出于AOP的考虑,即若使用二级缓存,在AOP情形下,注入到其他bean的,不是最终的代理对象,而是原始对象。
不用一级是因为初始化完成的bean是放在一级缓存中的,半成品bean若放在一级缓存中则进行属性填充时有可能拿到的时半成品。