Spring三级缓存的理解

最近参加了一次面试,本来觉得自己对Spring三级缓存理解了,结果问了几个问题,直接晕了

1、如何解决循环依赖?这个我会

2、为什么有二级缓存?我回答提高了效率,又问,二级缓存是完整对象吗?我当时只考虑到这个时候可能会有代理生成,生成后应该是可以使用了,然后我回答,是完整的

面试官说它是不完整的,你回去好好看看吧

此处省略一千字。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

技不如人,我今天跟了一下源码,顺带把整个流程又梳理了一次:

首先要知道几个点:

1、在有代理对象生成时,其实这个循环依赖过程中有俩对象,这个需要注意,一个是对象本身(bean),一个是Aop代理对象(proxy),二级缓存生成代理对象的时候,这个

代理对象没啥毛病,已经可以使用了,但是这个bean对象是包含在代理对象内部的一个属性,这就很关键了,因为假如这个bean就是第一次实例化的那个bean,很明显它的依赖

注入还没有完全结束,所以此时说对象不完整其实说的是bean不完整,要说proxy不完整,我觉得有点牵强。

2、二级缓存存在是必须的,因为有一种情况就是,A依赖B,B依赖A,B依赖C,C依赖A,这时候C再调用getBean的时候,如果没有二级缓存,那么会再创建几个代理对象出来

这就违反了单例的初衷。所以二级缓存也是必须存在,而且二级缓存本身只能是不完整对象,因为第一次的依赖注入还没结束呢。

以上就是我对三级缓存的理解,如果还有不对的,欢迎指正。

posted @ 2021-11-22 17:22  0o飞行天下o0  阅读(717)  评论(1编辑  收藏  举报