spring cache原理

核心类:
CacheManager:缓存管理器,获取缓存的接口。
Cache:缓存操作抽象接口,抽象实现类为AbstractValueAdaptingCache

配置类:
CachingConfigurerSupport:缓存配置支持类,需要使用spring cache的项目继承,一个项目只能有一个相关bean。
AbstractCachingConfiguration:抽象缓存配置,用于初始化配置。加载cacheManager、 cacheResolver、 keyGenerator
ProxyCachingConfiguration : 继承AbstractCachingConfiguration,默认的缓存代理配置,用来配置拦截器。

拦截器:
BeanFactoryCacheOperationSourceAdvisor: 缓存切面,重写拦截器时不需要修改
CacheInterceptor:缓存拦截器,继承CacheAspectSupport。重写拦截器时可以继承。
CacheAspectSupport:缓存拦截核心实现,缓存拦截器都需要继承

基本原理:
1 项目继承CachingConfigurerSupport,进行缓存配置,一个项目只能有一个缓存配置类。项目启动时自动加载。

2 ProxyCachingConfiguration代理缓存配置类进行缓存拦截器注册,项目启动时自动加载。

3 方法执行的时候缓存拦截器会拦截带有缓存注解(cacheable/cacheput/cacheEvit/cacheTtl)的方法,进入CacheAspectSupport的execute方法中。

4 CacheAspectSupport的execute的主逻辑:前置删除缓存操作–查询缓存–(如果查询不到缓存执行方法)–添加缓存—后置删除缓存操作。每次都会按照这个流程走,在具体的方法里面会判断当前操作是否被执行。比如@cacheable注解的时候调用删除缓存操作方法就不会有任何执行。

5 如果缓存操作(get/put/evict)失败就会调用CacheErrorHandler的相应方法。如果没有CacheErrorHandler,默认使用SimpleCacheErrorHandler。

spring cache原理_第1张图片
spring cache原理_第2张图片
spring cache原理_第3张图片
spring cache原理_第4张图片

spring cache原理_第5张图片

spring cache原理_第6张图片

spring cache原理_第7张图片

你可能感兴趣的:(spring,缓存)