本文已参与「新人创作礼」活动,一起开启掘金创作。
-
开发人员使用注解@EnableCaching;
-
注解@EnableCaching导入CachingConfigurationSelector;
-
hingConfigurationSelector根据注解@EnableCaching 属性AdviceMode mode决定引入哪些配置类;
1.PROXY : AutoProxyRegistrar,ProxyCachingConfiguration;
2.ASPECTJ : AspectJCachingConfiguration;
本文以mode=PROXY为例;
- CachingConfigurationSelector导入AutoProxyRegistrar会确保容器中存在一个自动代理创建器(APC);
用于确保目标bean需要被代理时有可用的代理创建器;
- ProxyCachingConfiguration向容器定义如下基础设施bean:
1称为org.springframework.cache.config.internalCacheAdvisor类型为BeanFactoryCacheOperationSourceAdvisor的bean;
2称为cacheOperationSource类型为CacheOperationSource的bean; 用于获取方法调用时最终应用的Spring Cache注解的元数据;
3称为cacheInterceptor类型为CacheInterceptor的bean; 一个MethodInterceptor,包裹在目标bean外面用于操作Cache的AOP Advice。
-
AutoProxyRegistrar在容器启动阶段对每个bean创建进行处理,如果该bean中有方法应用了Spring Cache注解,为其创建相应的代理对象,包裹上面定义的BeanFactoryCacheOperationSourceAdvisor bean;
-
Spring Cache注解的bean方法被调用,其实调用首先发生在代理对象上,先到达cacheInterceptor,然后才是目标bean方法的调用; cacheInterceptor既处理调用前缓存操作,也处理调用返回时缓存操作; ———————————————— 版权声明:本文为CSDN博主「安迪源文」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/andy_zhang2…