当前位置: 首页 > news >正文

关于Spring Cacheable注解的讨论

注解说明

@Cacheable注解中,value或cacheNames表示缓存名,key表示缓存里的主键名,unless表示某些条件下不存缓存,condition表示只在某些条件下才存缓存(即unless的否定条件)。
这里要特别注意:key属性使用的是SpEL表示,而非普通字符串。所以我们会看到这样的写法:

@Cacheable(key="'key1'", ....)

表示key名为key1,SpEL里字符串必须用单引号括起来。
如果不使用SpEL指定key,spring框架会自动为我们生成一个key,生成规则是:
AppID+subAppID+@Cacheable.value+入参字符串
其中,入参字符串的拼接规则是:

  • 如果只有一个入参P,则返回P.toString()
  • 如果有多个入参P1、P2、P3等,框架会组装成一个SimpleKey对象,返回SimpleKey.toString(),具体形如:
    SimpleKey[P1.toString()+‘,’+P2.toString() + ‘,’ + P3.toString() …]
    参数间以逗号连接。

原理

核心逻辑在CacheAspectSupport里,该类的实例是cacheInterceptor,在ProxyCachingConfiguration.cacheInterceptor里定义。
在CacheAspectSupport.afterSingletonsInstantiated -> CacheAspectSupport.setCacheManager里,框架会查找CacheManager bean,将其设置到默认cacheResolver里,这个默认cacheResolver是一个SimpleCacheResolver实例。如果有多个CacheManager bean,会选择标注了@Primary的那个bean。
到了真正处理@Cacheable注解时,会调用CacheAspectSupport.getCacheOperationMetadata,这个函数的逻辑是,如果在@Cacheable注解里已指定了cacheResolver或cacheManager,就用用户指定的。若未指定,则用前面设置好的那个默认cacheResolver。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【APP逆向】央视频播放量增加,逆向全过程解密
  • 【JAVA WEB实用技巧与优化方案】如何排查JVM线程死锁和内存溢出问题
  • docker_构建镜像成功但启动容器的执行程序总是报文件找不到(lesson)
  • C++面向对象程序设计 - 异常处理
  • C#上位机开发
  • 【python010】获取任意多边形区域内的经纬度点并可视化
  • 单向环形链表的创建与判断链表是否有环
  • 【ArcGISPro SDK】构建多面体要素
  • matlab 异常值检测与处理——Z-score法
  • 软件设计师笔记-程序语言基础知识
  • 电子电气架构 --- 信息安全测试模糊测试
  • 【iOS】界面推出的方法
  • Opencv图像处理
  • HTML LocalStorage
  • 第1期测试社招面试经验月报
  • 时间复杂度分析经典问题——最大子序列和
  • 2017年终总结、随想
  • Akka系列(七):Actor持久化之Akka persistence
  • extjs4学习之配置
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • SpriteKit 技巧之添加背景图片
  • Vue 重置组件到初始状态
  • vuex 笔记整理
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue学习第二天
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 力扣(LeetCode)357
  • 双管齐下,VMware的容器新战略
  • 我这样减少了26.5M Java内存!
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用 Swift 编写面向协议的视图
  • nb
  • 06-01 点餐小程序前台界面搭建
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (备份) esp32 GPIO
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)树状数组
  • **CI中自动类加载的用法总结
  • .apk 成为历史!
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net 7和core版 SignalR
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net Core 中间件与过滤器
  • .net core控制台应用程序初识
  • .net 发送邮件
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET中的Exception处理(C#)
  • .NET中统一的存储过程调用方法(收藏)
  • [ C++ ] STL_list 使用及其模拟实现
  • [2016.7 test.5] T1