type
Post
status
Published
date
Aug 5, 2024
slug
summary
Spring三级缓存是什么?有什么作用?
tags
Spring
技术
category
技术分享
icon
password
- 什么是循环依赖?
- ?
- Spring的三级缓存,为什么需要三级?
Spring的三级缓存是什么?
从源码看就是三个Map
Spring的三级缓存它解决什么问题?
从方法的注释可以知道这是这是获取bean的方法,而且还提到提早暴露是为了解决循环依赖问题 说明: 1、一级缓存不存在,若不在创建中则返回空,初次创建Bean时,若在创建中则走下一步 2、检查二级缓存,也不存在,当多个循环依赖时已经获取过会从三级升到二级时,如先经过A->B->A,再A->C->A 3、检查三级缓存 ,当是循环依赖时且都未创建则会进入这个逻辑如A->B->A
Spring的三级缓存,为什么需要三级?
有必要三级吗?从源码上看三级缓存存的是ObjectFactory(lambda表达式)也就是bean未实例化(代理类未实例化实际的类以及通过反射实例化,lambda是封装了遍历后置处理器可以进一步加工,代理类生成也就是这个时候)其实直接在产生ObjectFactory这步直接执行后放入二级缓存中也是可以的,但从性能分析如果没有循环引用这个二级缓存也不会被用到,最终在doCreateBean→initializeBean→applyBeanPostProcessorsAfterInitialization也有一段代码产生包装类的代码和三级缓存中的ObjectFactory是一样的都是遍历后缀处理器处理,而代理处理类(想要验证需要开启AOP不然不会有该处理类)是一样的(org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator实现类是org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator)所调用的方法内容是差不多的逻辑是等价的
🤗 总结归纳
目的是用于解决循环依赖但其实二级也能解决为了延迟初始化而设计三级缓存,减少非循环依赖时无需初始化三级缓存的ObjectFactory,从而减少性能开销和内存占用
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:chenyou
- 链接:https://blog.chenyou.top/article/6d55ea61-10fa-445a-83fd-7aaf9b063146
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

