一、@Caching
@Caching 定义了复杂的缓存规则:
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Caching { Cacheable[] cacheable() default {}; CachePut[] put() default {}; CacheEvict[] evict() default {}; }
示例:
@Caching( cacheable = { @Cacheable(value={"emp"}, key = "#lastName") }, put = { @CachePut(value = {"emp"}, key = "#result.id"), @CachePut(value = {"emp"}, key = "#result.email") } ) public Employee getEmpByLastName(String lastName) { return employeeMapper.getEmpByLastName(lastName); }
@Caching 定义了复杂的缓存规则,如果使用@CachePut注解,方法一定会运行。
二、@CacheConfig
这个注解是加在类上,用于抽取缓存的公共配置。
@CacheConfig
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CacheConfig { /** * Names of the default caches to consider for caching operations defined * in the annotated class. * <p>If none is set at the operation level, these are used instead of the default. * <p>May be used to determine the target cache (or caches), matching the * qualifier value or the bean names of a specific bean definition. */ String[] cacheNames() default {}; //指定缓存的名字 /** * The bean name of the default {@link org.springframework.cache.interceptor.KeyGenerator} to * use for the class. * <p>If none is set at the operation level, this one is used instead of the default. * <p>The key generator is mutually exclusive with the use of a custom key. When such key is * defined for the operation, the value of this key generator is ignored. */ String keyGenerator() default ""; //指定 key 的生成策略 /** * The bean name of the custom {@link org.springframework.cache.CacheManager} to use to * create a default {@link org.springframework.cache.interceptor.CacheResolver} if none * is set already. * <p>If no resolver and no cache manager are set at the operation level, and no cache * resolver is set via {@link #cacheResolver}, this one is used instead of the default. * @see org.springframework.cache.interceptor.SimpleCacheResolver */ String cacheManager() default ""; //指定 cacheManager /** * The bean name of the custom {@link org.springframework.cache.interceptor.CacheResolver} to use. * <p>If no resolver and no cache manager are set at the operation level, this one is used * instead of the default. */ String cacheResolver() default ""; }
示例:
@CacheConfig(cacheNames = {"emp"}) //抽取缓存的公共配置 @Service public class EmployeeService {}