From f06cad91c03c395177ee139539ac1dabfd4855da Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 21 Feb 2014 14:24:00 +0100 Subject: [PATCH] Add custom cache manager per cache operation It is now possible to specify the CacheManager to use per operation. The related cache annotation now has an extra attribute that defines the name of the CacheManager bean to use. The cache manager that was previously used is therefore a 'default' cache manager (i.e. the one to use if no custom cache manager has been set on the operation). Issue: SPR-8696 --- .../AnnotatedClassCacheableService.java | 12 +++++++ .../cache/config/CacheableService.java | 4 +++ .../cache/config/DefaultCacheableService.java | 12 +++++++ .../cache/config/annotation-cache-aspectj.xml | 17 +++++++--- .../cache/annotation/CacheEvict.java | 6 ++++ .../cache/annotation/CachePut.java | 6 ++++ .../cache/annotation/Cacheable.java | 6 ++++ .../SpringCacheAnnotationParser.java | 4 +++ .../cache/config/CacheAdviceParser.java | 5 +++ .../cache/interceptor/CacheAspectSupport.java | 24 +++++++++----- .../cache/interceptor/CacheOperation.java | 14 ++++++++ .../cache/config/spring-cache-4.0.xsd | 6 ++++ .../AnnotationCacheOperationSourceTests.java | 32 +++++++++++++++++++ .../cache/config/AbstractAnnotationTests.java | 27 +++++++++++++++- .../AnnotatedClassCacheableService.java | 13 ++++++++ .../cache/config/CacheableService.java | 5 +++ .../cache/config/DefaultCacheableService.java | 13 ++++++++ .../cache/config/EnableCachingTests.java | 8 +++++ .../config/annotationDrivenCacheConfig.xml | 24 +++++++++----- .../config/annotationDrivenCacheNamespace.xml | 18 ++++++++--- .../cache/config/cache-advice.xml | 18 ++++++++--- 21 files changed, 243 insertions(+), 31 deletions(-) diff --git a/spring-aspects/src/test/java/org/springframework/cache/config/AnnotatedClassCacheableService.java b/spring-aspects/src/test/java/org/springframework/cache/config/AnnotatedClassCacheableService.java index 9a00b17c2b..6a48f6e94b 100644 --- a/spring-aspects/src/test/java/org/springframework/cache/config/AnnotatedClassCacheableService.java +++ b/spring-aspects/src/test/java/org/springframework/cache/config/AnnotatedClassCacheableService.java @@ -117,6 +117,18 @@ public class AnnotatedClassCacheableService implements CacheableService return counter.getAndIncrement(); } + @Override + @Cacheable(value = "default", cacheManager = "customCacheManager") + public Object customCacheManager(Object arg1) { + return counter.getAndIncrement(); + } + + @Override + @Cacheable(value = "default", cacheManager = "unknownBeanName") + public Object unknownCustomCacheManager(Object arg1) { + return counter.getAndIncrement(); + } + @Override @CachePut("default") public Object update(Object arg1) { diff --git a/spring-aspects/src/test/java/org/springframework/cache/config/CacheableService.java b/spring-aspects/src/test/java/org/springframework/cache/config/CacheableService.java index fe523574e5..6fab25f7b7 100644 --- a/spring-aspects/src/test/java/org/springframework/cache/config/CacheableService.java +++ b/spring-aspects/src/test/java/org/springframework/cache/config/CacheableService.java @@ -62,6 +62,10 @@ public interface CacheableService { T unknownCustomKeyGenerator(Object arg1); + T customCacheManager(Object arg1); + + T unknownCustomCacheManager(Object arg1); + T throwChecked(Object arg1) throws Exception; T throwUnchecked(Object arg1); diff --git a/spring-aspects/src/test/java/org/springframework/cache/config/DefaultCacheableService.java b/spring-aspects/src/test/java/org/springframework/cache/config/DefaultCacheableService.java index 4ef5fa1eb3..1932d286a9 100644 --- a/spring-aspects/src/test/java/org/springframework/cache/config/DefaultCacheableService.java +++ b/spring-aspects/src/test/java/org/springframework/cache/config/DefaultCacheableService.java @@ -121,6 +121,18 @@ public class DefaultCacheableService implements CacheableService { return counter.getAndIncrement(); } + @Override + @Cacheable(value = "default", cacheManager = "customCacheManager") + public Long customCacheManager(Object arg1) { + return counter.getAndIncrement(); + } + + @Override + @Cacheable(value = "default", cacheManager = "unknownBeanName") + public Long unknownCustomCacheManager(Object arg1) { + return counter.getAndIncrement(); + } + @Override @CachePut("default") public Long update(Object arg1) { diff --git a/spring-aspects/src/test/java/org/springframework/cache/config/annotation-cache-aspectj.xml b/spring-aspects/src/test/java/org/springframework/cache/config/annotation-cache-aspectj.xml index f556250129..4d3a898b7f 100644 --- a/spring-aspects/src/test/java/org/springframework/cache/config/annotation-cache-aspectj.xml +++ b/spring-aspects/src/test/java/org/springframework/cache/config/annotation-cache-aspectj.xml @@ -1,13 +1,10 @@ + http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">