美文网首页
spring为什么需要三级缓存(最通透版!)

spring为什么需要三级缓存(最通透版!)

作者: holyABCD | 来源:发表于2024-02-28 17:42 被阅读0次

    前言

    看这篇文章之前,你一定要对createBean代码相当了解!因为文章不会写一处代码!

    为什么?

    为什么采用三级缓存?
        spring默认不允许循环依赖,如果不考虑循环依赖的情况,一级缓存即可
        为什么一层缓存不行?
            一方面讲:拿spring的bean生命周期来说,创建实例,装填依赖,初始化内容,最终放到一级缓存中,一级缓存里放的就应该是最终的数据。如果要提前暴露,需要一层缓存。
            二方面讲:考虑循环依赖,提前暴露的地址和最终的地址有可能不一样,这你得承认(你可以自定义postProcessor在postProcessAfterInitialization中进行修改),那么提前暴露的东西有没有被人用,就需要知晓,如果被人用了,但是地址不一样就,就需要报警!
        为什么二层缓存不行?
            这块得判断,不要哪层?
            如果不要第二层
                那么就是暴露的匿名内部类那里获取AOP(不考虑非AOP情况,因为bean不变,无意义)又分成两种情况,
                    获取匿名内部类后不移入一级缓存
                        显而易见,如果有多个使用提前暴露的,会生成多个引用
                    获取匿名内部类后移入一级缓存
                        保证了只生成一个引用,提前暴露的被人用了,也可以判断出来,但是显然不符合一级缓存存放最终bean的原则
            如果不要第三层,那么就实例完,直接放到二级缓存,这样就判断不出来是否被人用了
        ==== 以上就是为什么用三级缓存的完整解释,完结,撒花!
    

    相关文章

      网友评论

          本文标题:spring为什么需要三级缓存(最通透版!)

          本文链接:https://www.haomeiwen.com/subject/dbrfzdtx.html