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在方法调用后执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值