spring cache 6: 启动时计算并缓存方法是否需要走缓存

spring cache 6: 启动时计算并缓存方法是否需要走缓存

初始化bean时:

  1. BeanFactoryCacheOperationSourceAdvisor(Advisor)中的Pointcut是CacheOperationSourcePointcut
  2. spring启动时创建对象(ProxyFactory创建当前对象的一个Proxy类)中的wrapIfNecessary需要计算出所有advisor(调用AbstractAutoProxyCreator.getAdvicesAndAdvisorsForBean)
  3. 判断标准是 Advisor.class及其子类
  4. 对于上面返回的结果,会执行一个canApply方法,首先判断ClassFilter,然后返回true,再迭代Class中的所有Method执行MethodMatcher
  5. 只要其中一个Method执行MethodMatcher为true,就返回这个advisor
  6. 其中MethodMatcher中的matches实现是一个查询方法,但是查询不到会进行计算并缓存(null就是未计算过,但是Object getValue是null表示计算过,但是是null)
  7. 对于Spring cache中Advisor是BeanFactoryCacheOperationSourceAdvisor,计算方法是:AbstractFallbackCacheOperationSource.getCacheOperations
  8. 所以初始化bean的时候把所有class.method都计算出是否需要走缓存的advisor,并再一个全局的map中进行缓存

执行方法时:
9. 会走到 JdkDynamicAopProxy.invoke,这个地方需要获取inteceptor列表(this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass); )
10. 上面这个方法会根据method作为key,在本地缓存inteceptor列表(因为一个代理对象都有自己的AdvisedSupport.methodCache,所以不需要Class+Method作为key)
11. 上面这个方法的计算逻辑是:拿到所有advisor,然后首先通过 ClassFilter,然后通过MethodMatcher,返回真正要走到的interceptor列表
12. 返回的interceptor列表最终会走到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值