<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManager" class="org.springframework.cache.support.CompositeCacheManager">
<property name="cacheManagers">
<list>
<!--<ref bean="cacheManager1"/>-->
<ref bean="cacheManager2"/>
</list>
</property>
<property name="fallbackToNoOpCache" value="true"/>
</bean>
<bean id="cacheManager1" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"></property>
</bean>
<bean id="cacheManager2" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean name="myCache2" class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"/>
</set>
</property>
</bean>
//缓存
public @interface Cacheable {
//调用的缓存名字
@AliasFor("cacheNames")
String[] value() default {};
//调用的缓存名字
@AliasFor("value")
String[] cacheNames() default {};
//SpEL表达式,设置缓存的KEY值
String key() default "";
//cacheManager的BeanName
String cacheManager() default "";
//SpEL表达式,一个boolean值,用于表达在什么情况下可以被缓存
String condition() default "";
//SpEL表达式,一个boolean值,用于表达在什么情况下不被缓存
String unless() default "";
}
//删除缓存
public @interface CacheEvict {
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
String key() default "";
//实现org.springframework.cache.interceptor.KeyGenerator接口的类的BeanName名字
//与key值是相互制
String keyGenerator() default "";
String cacheManager() default "";
String cacheResolver() default "";
//什么情况下进行缓存删除操作
String condition() default "";
//是否删除缓存中的所有实例,如果设置为true,就不能设置key了
boolean allEntries() default false;
//当设置为true时,无论方法是否运行成功都执行删除缓存操作
//当设置为false时,只有方法运行成功了才进行删除缓存操作
boolean beforeInvocation() default false;
}
//修改缓存值
public @interface CachePut {
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
String key() default "";
String keyGenerator() default "";
String cacheManager() default "";
String cacheResolver() default "";
String condition() default "";
String unless() default "";
}
//对缓存分组,也就说把需要操作的动作放在同一个缓存组里面操作
public @interface Caching {
Cacheable[] cacheable() default {};
CachePut[] put() default {};
CacheEvict[] evict() default {};
}