1.美圖
2.概述
緩存相關注解 | 解釋 |
---|---|
@EnableCaching | 開啓緩存註解的支持 |
@CacheConfig | 用於統一制定一些配置參數,這樣在其他緩存註解裏面就不用重複指定 |
@Cacheable | 如果之前已經有緩存數據值直接返回緩存數據,否則執行方法,緩存方法的返回結果 |
@CachePut | 能夠根據方法的請求參數對其結果進行緩存,和 @Cacheable 不同的是,它每次都會觸發真實方法的調用 |
@CacheEvict | 能夠根據一定的條件對緩存進行清空 |
@Caching | 組合多個Cache註解的使用 |
3.@EnableCaching
@Target(ElementType.TYPE) // 該註解一般用於添加類上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(CachingConfigurationSelector.class)
public @interface EnableCaching {
/**
* 當AdviceModemode爲PROXY時,選擇代理是基於接口實現還是cglib實現
*/
boolean proxyTargetClass() default false;
/**
* 代理方式是由JDK實現還是AspectJ實現
*/
AdviceMode mode() default AdviceMode.PROXY;
/**
*
* 指示AsyncAnnotationBeanPostProcessors的順序
* 默認值是 Ordered.LOWEST_PRECEDENCE,爲了在所有其他後處理器之後運行
*/
int order() default Ordered.LOWEST_PRECEDENCE;
}
@EnableCaching
註解用於開啓緩存的支持,只有開啓了緩存的支持,纔有後續的@Cacheable、@Caching、@CacheEvict、@CachePut、@CacheConfig
的使用。
4.@CacheConfig
@Target(ElementType.TYPE) // 該註解常用於添加在類上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CacheConfig {
/**
* 緩存的名稱,必須至少指定一個,我們可以簡單的認爲是命名空間。我們一般用項目的名字
*/
String[] cacheNames() default {};
/**
* key生成器,可以實現 org.springframework.cache.interceptor.KeyGenerator接口,來規定想要保存的key的格式
* 設置自定義的key生成器實現類對應Bean的名字
*/
String keyGenerator() default "";
/**
* 緩存管理器,我們可以實現CacheManager接口來實現緩存管理器
* 指定自定義的緩存管理器對應的Bean名稱
*/
String cacheManager() default "";
/**
* Cache解析器,用於根據實際情況來動態解析使用哪個Cache,實現CacheResolver接口
* 指定自定義的Cache解析器對應的Bean名稱
*/
String cacheResolver() default "";
}
當我們需要緩存的地方越來越多,這個時候我們可以使用@CacheConfig
註解來統一制定一些參數。這樣在@Cacheable、@CachePut
等這些註解上就可以不用重複去填這些參數了。
5.@Cacheable
@Target({ElementType.METHOD, ElementType.TYPE}) // 該註解用於添加在方法或者類上
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
/**
* 緩存的名稱,必須至少指定一個,緩存的名稱,必須至少指定一個,我們可以簡單的認爲是命名空間。我們一般用項目的名字
*/
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
/**
* 緩存的key
*/
String key() default "";
/**
* key生成器,可以實現 org.springframework.cache.interceptor.KeyGenerator接口,來規定想要保存的key的格式
* 設置自定義的key生成器實現類對應Bean的名字
*/
String keyGenerator() default "";
/**
* 緩存管理器,我們可以實現CacheManager接口來實現緩存管理器
* 指定自定義的緩存管理器對應的Bean名稱
*/
String cacheManager() default "";
/**
* Cache解析器,用於根據實際情況來動態解析使用哪個Cache,實現CacheResolver接口
* 指定自定義的Cache解析器對應的Bean名稱
*/
String cacheResolver() default "";
/**
* 緩存的條件
*/
String condition() default "";
/**
* 否定緩存。當條件結果爲TRUE時,就不會緩存
* @Cacheable(value=”testcache”,unless=”#userName.length()>2”)
*/
String unless() default "";
/**
* 是否使用異步模式
*/
boolean sync() default false;
}
@Cacheable
註解會先查詢是否已經有緩存,有會使用緩存,沒有則會執行方法並緩存。
6.@CachePut
@Target({ElementType.METHOD, ElementType.TYPE}) // 添加在類或者方法上
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface CachePut {
/**
* 緩存的名稱,必須至少指定一個,我們可以簡單的認爲是命名空間。我們一般用項目的名字
*/
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
/**
* 緩存的key
*/
String key() default "";
/**
* key生成器,可以實現 org.springframework.cache.interceptor.KeyGenerator接口,來規定想要保存的key的格式
* 設置自定義的key生成器實現類對應Bean的名字
*/
String keyGenerator() default "";
/**
* 緩存管理器,我們可以實現CacheManager接口來實現緩存管理器
* 指定自定義的緩存管理器對應的Bean名稱
*/
String cacheManager() default "";
/**
* Cache解析器,用於根據實際情況來動態解析使用哪個Cache,實現CacheResolver接口
* 指定自定義的Cache解析器對應的Bean名稱
*/
String cacheResolver() default "";
/**
* 緩存的條件
*/
String condition() default "";
/**
* 否定緩存。當條件結果爲TRUE時,就不會緩存
* @Cacheable(value=”testcache”,unless=”#userName.length()>2”)
*/
String unless() default "";
}
@CachePut
註解的作用主要針對方法配置,能夠根據方法的請求參數對其結果進行緩存,和@Cacheable
不同的是,它每次都會觸發真實方法的調用 。簡單來說就是用戶更新緩存數據。但需要注意的是該註解的value
和 key
必須與要更新的緩存相同,也就是與@Cacheable
相同。
7.@CacheEvict
@Target({ElementType.METHOD, ElementType.TYPE}) // 添加在類或者方法上
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface CacheEvict {
/**
* 緩存的名稱,必須至少指定一個,我們可以簡單的認爲是命名空間。我們一般用項目的名字
*/
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
/**
* 緩存的key
*/
String key() default "";
/**
* key生成器,可以實現 org.springframework.cache.interceptor.KeyGenerator接口,來規定想要保存的key的格式
* 設置自定義的key生成器實現類對應Bean的名字
*/
String keyGenerator() default "";
/**
* 緩存管理器,我們可以實現CacheManager接口來實現緩存管理器
* 指定自定義的緩存管理器對應的Bean名稱
*/
String cacheManager() default "";
/**
* Cache解析器,用於根據實際情況來動態解析使用哪個Cache,實現CacheResolver接口
* 指定自定義的Cache解析器對應的Bean名稱
*/
String cacheResolver() default "";
/**
* 緩存的條件
*/
String condition() default "";
/**
* 是否清空所有緩存內容,缺省爲 false,如果指定爲 true,則方法調用後將立即清空所有緩存
*/
boolean allEntries() default false;
/**
* 是否在方法執行前就清空,缺省爲 false,
* 如果指定爲 true,則在方法還沒有執行的時候就清空緩存,缺省情況下,如果方法執行拋出異常,則不會清空緩存
*/
boolean beforeInvocation() default false;
}
@CacheEvict
能夠根據一定的條件對緩存進行清空。
8.@Caching
@Target({ElementType.METHOD, ElementType.TYPE}) // 添加在類或者方法上
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Caching {
Cacheable[] cacheable() default {};
CachePut[] put() default {};
CacheEvict[] evict() default {};
}
@Caching
用於組合多個Cache
註解的使用。相當於在一個方法上面添加多個註解。