`
eric_weitm
  • 浏览: 242642 次
  • 性别: 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 是Spring框架提供的一种缓存抽象,从Spring 3.1版本开始引入,目的是为了简化应用程序中的缓存管理,实现缓存透明化。通过在方法上添加特定注解,如@Cacheable、@CacheEvict等,可以轻松地启用缓存功能...

    Redis整合SpringCache实例

    **Redis整合SpringCache实例** 在现代的Web应用中,数据缓存是提高系统性能的关键技术之一。本示例主要探讨如何将开源的内存数据结构存储系统Redis与Spring Cache框架结合,实现高效的分布式缓存解决方案。Redis以...

    Spring cache

    1. **工作原理**:Spring Cache 使用 AOP (面向切面编程) 来拦截被注解的方法调用,并根据配置执行缓存操作。具体流程包括确定缓存管理器、生成缓存键、执行缓存命中或未命中的逻辑等。 2. **缓存管理器**:默认...

    springcache-1.1.0.zip

    本篇文章将深入探讨SpringCache的原理、配置以及如何结合Redis或Memcached实现高效的分布式缓存。 1. SpringCache基础 SpringCache是基于注解驱动的,允许开发者通过在方法上添加`@Cacheable`、`@CacheEvict`等注解...

    Spring Cache 复合缓存管理器

    在Spring框架中,Spring Cache是用于提供统一的缓存抽象层的一个重要组件,它使得开发者能够在不修改代码的情况下,方便地在应用中引入缓存机制,以提高性能和响应速度。"Spring Cache 复合缓存管理器"指的是通过...

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

    在本文中,我们将深入探讨SpringCache的加载和拦截原理,以及如何配置和使用它。 首先,SpringCache的加载原理主要依赖于Spring AOP(面向切面编程)的支持。当我们在服务或DAO层的方法上添加了特定的缓存注解(如`...

    spring_cache

    2. **Spring Cache的原理**:Spring Cache利用注解驱动的方式,允许开发者在方法级别声明缓存。例如,`@Cacheable`、`@CacheEvict` 和 `@CachePut` 注解分别用于缓存方法结果、清除缓存和更新缓存。 3. **配置缓存*...

    浅谈Spring boot cache使用和原理

    浅谈Spring boot cache使用和原理 Spring Boot Cache是Spring框架中的一种缓存机制,旨在解决程序中的性能瓶颈问题。缓存机制可以减少对数据库的查询次数,提高程序的性能和响应速度。 缓存技术可以解决的问题: ...

    SpringBoot-Cache源码分享.zip

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

    spring缓存ehcache

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

    开源项目bfs,cache2go,groupcache

    开源项目在IT行业中扮演着重要的角色,它们提供了一种共享、学习和改进代码的方式,促进了技术的快速发展。...无论是对于提升现有项目的性能,还是为了理解底层原理,这些开源项目都值得投入时间和精力去研究。

    spring-cache:Spring Redis缓存示例

    **Spring Cache的原理** Spring Cache的核心是通过`@Cacheable`、`@CacheEvict`和`@CachePut`注解来声明式地管理缓存。`@Cacheable`用于将方法的返回结果存入缓存,`@CacheEvict`用于清除指定缓存中的数据,而`@...

    Spring3.0整合redis相关jar

    <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> ``` 并在需要缓存的方法上使用`@Cacheable`或`@CacheEvict`注解。 6. **事务支持**: 虽然Redis本身不支持事务,...

    cache 实例

    在Java中,常见的缓存实现有Java内置的`java.util.concurrent.ConcurrentHashMap`(常用于简单的本地缓存实现),Google的Guava库中的`LoadingCache`,以及Spring框架提供的`@Cacheable`注解支持的Spring Cache等。...

    Spring集成的Hibernate配置二级缓存

    本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...

    jetcache:JetCache是​​一个Java缓存框架

    它提供的注释比Spring Cache中的注释更强大。 JetCache中的注释支持本地TTL,两级缓存和分布式自动刷新,您也可以手动编写Cache实例。 当前有四个工具: RedisCache , TairCache (在github上不是开源的), ...

    spring3.1.4源码

    这个版本的源码对于理解Spring的工作原理、学习框架设计思想以及进行二次开发都非常有价值。接下来,我们将深入探讨Spring 3.1.4中的主要知识点。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性...

    cache-demo-2.5.zip_Cache2.5_DEMO_cache

    9. Java缓存API:如Guava Cache、Spring Cache等的使用方法。 10. 测试:如何编写测试用例来验证缓存功能的正确性和效率。 通过研究这个"cache-demo-2.5.zip",开发者可以深入了解阿里巴巴系统中的缓存管理实践,并...

    spring源码编译以及如何用eclipse运行的方法

    ### Spring源码编译及...通过以上步骤,不仅能够成功编译Spring源码,还能在Eclipse环境中运行Spring的各种示例代码,深入了解Spring框架的工作原理和技术细节。这对于深入学习Spring框架、提高编程技能具有重要意义。

Global site tag (gtag.js) - Google Analytics