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 9a00b17c2b80..6a48f6e94beb 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 Object unknownCustomKeyGenerator(Object arg1) { 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 fe523574e5a6..6fab25f7b7f7 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 4ef5fa1eb3e2..1932d286a9ab 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 Long unknownCustomKeyGenerator(Object arg1) { 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 f55625012973..4d3a898b7f5e 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">