
图片
面试官:为什么要用三级缓存来解决循环依赖问题(只用一级缓存行不行
,只用二级缓存行不行)
朋友:霸点蛮,只用一级缓存也是可以解决的,但是会复杂化整个逻辑
半 成 品 对 象 是 没 法 直 接 使 用 的 ( 存 在 NPE 问 题 ) , 所 以 Spring
需要保证在启动的过程中,所有中间产生的半成品对象最终都会变成成品
对象
如果将半成品对象和成品对象都混在一级缓存中,那么为了区分他们,势
必会增加一些而外的标记和逻辑处理,这就会导致对象的创建过程变得复
杂化了
将半成品对象与成品对象分开存放,两级缓存各司其职,能够简化对象的
创建过程,更简单、直观
如 果 Spring 不 引 入 AOP , 那 么 两 级 缓 存 就 够 了 , 但 是 作 为 Spring
的核心之一,AOP 怎能少得了呢
所 以 为 了 处 理 AOP 时 的 循 环 依 赖 , Spring
引入第三级缓存来处理循环依赖时的代理对象的创建
面试官:如果将代理对象的创建过程提前,紧随于实例化之后,而在初始
化之前,那是不是就可以只用两级缓存了?
朋友心想:这到了我知识盲区了呀,我干哦!却点头道:你说的有道理耶
,我没有细想这一点,回头我去改改源码试试看
前面几问,感觉朋友答的还不错,但是最后一问中的第三级缓存的作用,
回答的还差那么一丢丢,到底那一丢丢是什么,我们慢慢往下看。
写在前面