`
eric_weitm
  • 浏览: 235953 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring cache 原理

阅读更多

一、@EnableCaching - AbstractAdvisorAutoProxyCreator(ImportSelector机制,本身是BeanPostProcessor)

二、核心组件

1、AnnotationCacheOperationSource:获取SpringCache相关的标注并将其转换为对应的CacheOperation属性。

2、BeanFactoryCacheOperationSourceAdvisor是一个PointcutAdvisor,是SpringCache使用Spring AOP机制的关键所在,该advisor会织入到需要执行缓存操作的bean的增强代理中形成一个切面。

3、CacheInterceptor是一个拦截器,当方法调用时碰到了BeanFactoryCacheOperationSourceAdvisor定义的切面,就会执行CacheInterceptor的业务逻辑,该业务逻辑就是缓存的核心业务逻辑。

SpringCacheAnnotationParser 查找所有cache相关注解

 

三、遇到的坑, condition和unless执行的时机不同

https://blog.csdn.net/m0_37962779/article/details/78747619 

https://www.cnblogs.com/yueshutong/p/9381540.html

上面在各个注释中都存在condition属性,其支持使用SpEL(Spring Expression Language),因此具备相当的灵活性,并可以支持非常复杂的语义。各个标注中的condition的执行时机略有不同,因此它们可以使用的SpEL上下文数据也略有不同。

@Cacheable中的condition是在执行方法之前用于被判断是否符合从缓存中读取,因此它无法使用返回值#result;而其unless是在执行方法之后做判断,因此它可以使用返回值#result。

@Cacheput中的condition和unless都是在执行方法之后用于被判断是否符合将结果保存到缓存中,因此它们都可以使用返回值#result。

@CacheEvict的condition由beforeInvocation的值来确定是在方法调用前还是在方法调用后执行。若beforeInvocation为true则condition在方法调用前执行;否则condition在方法调用后执行。

分享到:
评论

相关推荐

    Spring Cache的基本使用与实现原理详解

    缓存是实际工作中非经常常使用的一种提高性能的方法, 我们会在很多场景下来...下面这篇文章主要给大家介绍了关于Spring Cache的基本使用与实现原理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

    SpringCache框架加载/拦截原理详解

    主要介绍了SpringCache框架加载/拦截原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    SpringBoot-Cache源码分享.zip

    SpringBoot与缓存原理,整合redis、redis序列化,缓存注解、运行流程、原理讲解 配套三篇文章,推荐大家哦 https://blog.csdn.net/xiaozhegaa/article/details/110084902

    spring缓存ehcache

    其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来...

    浅谈Spring boot cache使用和原理

    主要介绍了浅谈Spring boot cache使用和原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    spring security 参考手册中文版

    32.2 CAS的工作原理 240 32.2.1 Spring安全和CAS交互序列 241 32.3 CAS客户端的配置 244 32.3.1服务票据认证 244 32.3.2单一注销 246 32.3.3使用CAS认证无状态服务 249 配置CAS以获取代理授予票证 249 使用代理票证...

    JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,

    3.6 @Enable*注解的工作原理 .... .............. 63 VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... ..............

    spring boot 项目代码,直接启动本人编写的,里面包含PPT下载地址

    3.6 @Enable*注解的工作原理 .... .............. 63 VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... ..............

    springboot知识点整理

    7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 ...

    高效的缓存管理解决方案AutoLoadCache.zip

    设计思想及原理使用方法注解(Annotation)说明表达式的应用缓存删除注意事项缓存管理页面与Spring Cache的区别源码阅读已经实现基于aspectj,代码在com.jarvis.cache.aop.aspectj.AspectjAopInterceptor。想通过...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    6.5 Spring Boot 运行原理 150 6.5.1 运作原理 153 6.5.2 核心注解 154 6.5.3 实例分析 157 6.5.4 实战 160 第7 章 Spring Boot 的Web 开发 170 7.1 Spring Boot 的Web 开发支持 170 7.2 Thymeleaf 模板引擎 171 ...

    spring AOP实现查询缓存

    本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    6.5 Spring Boot 运行原理 150 6.5.1 运作原理 153 6.5.2 核心注解 154 6.5.3 实例分析 157 6.5.4 实战 160 第7 章 Spring Boot 的Web 开发 170 7.1 Spring Boot 的Web 开发支持 170 7.2 Thymeleaf 模板引擎 171 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    6.5 Spring Boot 运行原理 150 6.5.1 运作原理 153 6.5.2 核心注解 154 6.5.3 实例分析 157 6.5.4 实战 160 第7 章 Spring Boot 的Web 开发 170 7.1 Spring Boot 的Web 开发支持 170 7.2 Thymeleaf 模板引擎 171 ...

    java抢红包源码-agan-redis-open:agan-redis-open

    1.为什么要用SpringCache,它解决了什么问题? 2.案例实战:SpringCache+SpringBoot + Mybatis 自动实现redis缓存 3.剖析SpringCache常用注解 4.总结springcache在开发中遇到的大坑小坑 微信文章的阅读量 1.微信文章...

    JavaEE开发的颠覆者+Spring+Boot实战++完整版

    60 3.6 @Enable*注解的工作原理 .... .............. 63 VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... ..........

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    框架中的MongoDB项目是我用来作为文件服务器的一个实现,很简单实现了上传下载删除和预览的几个接口,大家可以看源码,有朋友问到秒传怎么做 这里只是简单说一个关键词(MD5)原理自行理解吧 Redis延迟消费的项目是...

    springboot学习思维笔记.xmind

    spring-boot-starter-cache spring-boot-starter-cloud-connectors spring-boot-starter-data-elasticsearch spring-boot-starter-data-gemfire spring-boot-starter-data-jpa spring...

    研究各种Java技术(Springboot+Redis+Dubbo+Rocketmq)

    whatsmars-spring spring原理、集成及新特性 whatsmars-tomcat 模拟tomcat实现 whatsmars-dbrouter 分库分表实现 whatsmars-worker 多实例任务调度 whatsmars-dubbo Dubbo demo whatsmars-mq rocketmq,activemq ...

    研究各种Java技术(Springboot+Redis+Dubbo+Rocketmq) 京东技术 www.toutiao.im

    whatsmars-spring spring原理、集成及新特性 whatsmars-tomcat 模拟tomcat实现 whatsmars-dbrouter 分库分表实现 whatsmars-worker 多实例任务调度 whatsmars-dubbo Dubbo demo whatsmars-mq rocketmq,activemq ...

Global site tag (gtag.js) - Google Analytics