Introduce alias for 'value' attribute in caching annotations
This commit introduces new 'cacheNames' attributes (analogous to the existing attribute of the same name in @CacheConfig) as aliases for the 'value' attributes in @Cacheable, @CachePut, and @CacheEvict. In addition, SpringCacheAnnotationParser.getAnnotations() has been refactored to support synthesized annotations. Issue: SPR-11393
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -21,6 +21,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
@@ -140,8 +141,8 @@ public class CacheReproTests {
|
||||
|
||||
@Override
|
||||
@Caching(cacheable = {
|
||||
@Cacheable(value = "bigCache", unless = "#result.size() < 4"),
|
||||
@Cacheable(value = "smallCache", unless = "#result.size() > 3") })
|
||||
@Cacheable(cacheNames = "bigCache", unless = "#result.size() < 4"),
|
||||
@Cacheable(cacheNames = "smallCache", unless = "#result.size() > 3") })
|
||||
public List<String> multiple(int id) {
|
||||
if (this.multipleCount > 0) {
|
||||
fail("Called too many times");
|
||||
@@ -208,7 +209,7 @@ public class CacheReproTests {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
@Cacheable(value = "cache", condition = "false")
|
||||
@Cacheable(cacheNames = "cache", condition = "false")
|
||||
public Object getNeverCache(String key) {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -257,15 +257,15 @@ public class AnnotationCacheOperationSourceTests {
|
||||
public void caching() {
|
||||
}
|
||||
|
||||
@Cacheable(value = "test", keyGenerator = "custom")
|
||||
@Cacheable(cacheNames = "test", keyGenerator = "custom")
|
||||
public void customKeyGenerator() {
|
||||
}
|
||||
|
||||
@Cacheable(value = "test", cacheManager = "custom")
|
||||
@Cacheable(cacheNames = "test", cacheManager = "custom")
|
||||
public void customCacheManager() {
|
||||
}
|
||||
|
||||
@Cacheable(value = "test", cacheResolver = "custom")
|
||||
@Cacheable(cacheNames = "test", cacheResolver = "custom")
|
||||
public void customCacheResolver() {
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ public class AnnotationCacheOperationSourceTests {
|
||||
public void multipleStereotype() {
|
||||
}
|
||||
|
||||
@Caching(cacheable = {@Cacheable(value = "test", key = "a"), @Cacheable(value = "test", key = "b")})
|
||||
@Caching(cacheable = { @Cacheable(cacheNames = "test", key = "a"), @Cacheable(cacheNames = "test", key = "b") })
|
||||
public void multipleCaching() {
|
||||
}
|
||||
|
||||
@@ -287,7 +287,7 @@ public class AnnotationCacheOperationSourceTests {
|
||||
public void customKeyGeneratorInherited() {
|
||||
}
|
||||
|
||||
@Cacheable(value = "test", key = "#root.methodName", keyGenerator = "custom")
|
||||
@Cacheable(cacheNames = "test", key = "#root.methodName", keyGenerator = "custom")
|
||||
public void invalidKeyAndKeyGeneratorSet() {
|
||||
}
|
||||
|
||||
@@ -299,7 +299,7 @@ public class AnnotationCacheOperationSourceTests {
|
||||
public void customCacheResolverInherited() {
|
||||
}
|
||||
|
||||
@Cacheable(value = "test", cacheManager = "custom", cacheResolver = "custom")
|
||||
@Cacheable(cacheNames = "test", cacheManager = "custom", cacheResolver = "custom")
|
||||
public void invalidCacheResolverAndCacheManagerSet() {
|
||||
}
|
||||
|
||||
@@ -374,31 +374,31 @@ public class AnnotationCacheOperationSourceTests {
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Cacheable(value = "foo", keyGenerator = "custom")
|
||||
@Cacheable(cacheNames = "foo", keyGenerator = "custom")
|
||||
public @interface CacheableFooCustomKeyGenerator {
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Cacheable(value = "foo", cacheManager = "custom")
|
||||
@Cacheable(cacheNames = "foo", cacheManager = "custom")
|
||||
public @interface CacheableFooCustomCacheManager {
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Cacheable(value = "foo", cacheResolver = "custom")
|
||||
@Cacheable(cacheNames = "foo", cacheResolver = "custom")
|
||||
public @interface CacheableFooCustomCacheResolver {
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@CacheEvict(value = "foo")
|
||||
@CacheEvict("foo")
|
||||
public @interface EvictFoo {
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@CacheEvict(value = "bar")
|
||||
@CacheEvict("bar")
|
||||
public @interface EvictBar {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -46,7 +46,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", unless = "#result > 10")
|
||||
@Cacheable(cacheNames = "testCache", unless = "#result > 10")
|
||||
public Object unless(int arg) {
|
||||
return arg;
|
||||
}
|
||||
@@ -63,71 +63,71 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", allEntries = true)
|
||||
@CacheEvict(cacheNames = "testCache", allEntries = true)
|
||||
public void evictAll(Object arg1) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", beforeInvocation = true)
|
||||
@CacheEvict(cacheNames = "testCache", beforeInvocation = true)
|
||||
public void evictEarly(Object arg1) {
|
||||
throw new RuntimeException("exception thrown - evict should still occur");
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", key = "#p0")
|
||||
@CacheEvict(cacheNames = "testCache", key = "#p0")
|
||||
public void evict(Object arg1, Object arg2) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", key = "#p0", beforeInvocation = true)
|
||||
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true)
|
||||
public void invalidateEarly(Object arg1, Object arg2) {
|
||||
throw new RuntimeException("exception thrown - evict should still occur");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#p0")
|
||||
@Cacheable(cacheNames = "testCache", key = "#p0")
|
||||
public Object key(Object arg1, Object arg2) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache")
|
||||
@Cacheable("testCache")
|
||||
public Object varArgsKey(Object... args) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#root.methodName + #root.caches[0].name")
|
||||
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.caches[0].name")
|
||||
public Object name(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
|
||||
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
|
||||
public Object rootVars(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", keyGenerator = "customKyeGenerator")
|
||||
@Cacheable(cacheNames = "testCache", keyGenerator = "customKyeGenerator")
|
||||
public Object customKeyGenerator(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", keyGenerator = "unknownBeanName")
|
||||
@Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName")
|
||||
public Object unknownCustomKeyGenerator(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", cacheManager = "customCacheManager")
|
||||
@Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager")
|
||||
public Object customCacheManager(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", cacheManager = "unknownBeanName")
|
||||
@Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName")
|
||||
public Object unknownCustomCacheManager(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
@@ -139,7 +139,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
}
|
||||
|
||||
@Override
|
||||
@CachePut(value = "testCache", condition = "#arg.equals(3)")
|
||||
@CachePut(cacheNames = "testCache", condition = "#arg.equals(3)")
|
||||
public Object conditionalUpdate(Object arg) {
|
||||
return arg;
|
||||
}
|
||||
@@ -174,19 +174,19 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(value = "secondary", key = "#a0"), @CacheEvict(value = "primary", key = "#p0 + 'A'") })
|
||||
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#a0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") })
|
||||
public Object multiEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(cacheable = { @Cacheable(value = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
|
||||
@Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
|
||||
public Object multiCacheAndEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(cacheable = { @Cacheable(value = "primary", condition = "#a0 == 3") }, evict = { @CacheEvict("secondary") })
|
||||
@Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#a0 == 3") }, evict = { @CacheEvict("secondary") })
|
||||
public Object multiConditionalCacheAndEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
@@ -198,7 +198,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
|
||||
}
|
||||
|
||||
@Override
|
||||
@CachePut(value="primary", key="#result.id")
|
||||
@CachePut(cacheNames = "primary", key = "#result.id")
|
||||
public TestEntity putRefersToResult(TestEntity arg1) {
|
||||
arg1.setId(Long.MIN_VALUE);
|
||||
return arg1;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -53,83 +53,83 @@ public class DefaultCacheableService implements CacheableService<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", allEntries = true)
|
||||
@CacheEvict(cacheNames = "testCache", allEntries = true)
|
||||
public void evictAll(Object arg1) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", beforeInvocation = true)
|
||||
@CacheEvict(cacheNames = "testCache", beforeInvocation = true)
|
||||
public void evictEarly(Object arg1) {
|
||||
throw new RuntimeException("exception thrown - evict should still occur");
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", key = "#p0")
|
||||
@CacheEvict(cacheNames = "testCache", key = "#p0")
|
||||
public void evict(Object arg1, Object arg2) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "testCache", key = "#p0", beforeInvocation = true)
|
||||
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true)
|
||||
public void invalidateEarly(Object arg1, Object arg2) {
|
||||
throw new RuntimeException("exception thrown - evict should still occur");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", condition = "#classField == 3")
|
||||
@Cacheable(cacheNames = "testCache", condition = "#classField == 3")
|
||||
public Long conditional(int classField) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", unless = "#result > 10")
|
||||
@Cacheable(cacheNames = "testCache", unless = "#result > 10")
|
||||
public Long unless(int arg) {
|
||||
return (long) arg;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#p0")
|
||||
@Cacheable(cacheNames = "testCache", key = "#p0")
|
||||
public Long key(Object arg1, Object arg2) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache")
|
||||
@Cacheable(cacheNames = "testCache")
|
||||
public Long varArgsKey(Object... args) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#root.methodName")
|
||||
@Cacheable(cacheNames = "testCache", key = "#root.methodName")
|
||||
public Long name(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
|
||||
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
|
||||
public Long rootVars(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", keyGenerator = "customKeyGenerator")
|
||||
@Cacheable(cacheNames = "testCache", keyGenerator = "customKeyGenerator")
|
||||
public Long customKeyGenerator(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", keyGenerator = "unknownBeanName")
|
||||
@Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName")
|
||||
public Long unknownCustomKeyGenerator(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", cacheManager = "customCacheManager")
|
||||
@Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager")
|
||||
public Long customCacheManager(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "testCache", cacheManager = "unknownBeanName")
|
||||
@Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName")
|
||||
public Long unknownCustomCacheManager(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
@@ -141,7 +141,7 @@ public class DefaultCacheableService implements CacheableService<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CachePut(value = "testCache", condition = "#arg.equals(3)")
|
||||
@CachePut(cacheNames = "testCache", condition = "#arg.equals(3)")
|
||||
public Long conditionalUpdate(Object arg) {
|
||||
return Long.valueOf(arg.toString());
|
||||
}
|
||||
@@ -179,19 +179,19 @@ public class DefaultCacheableService implements CacheableService<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(value = "secondary", key = "#p0"), @CacheEvict(value = "primary", key = "#p0 + 'A'") })
|
||||
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#p0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") })
|
||||
public Long multiEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(cacheable = { @Cacheable(value = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
|
||||
@Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
|
||||
public Long multiCacheAndEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Caching(cacheable = { @Cacheable(value = "primary", condition = "#p0 == 3") }, evict = { @CacheEvict("secondary") })
|
||||
@Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#p0 == 3") }, evict = { @CacheEvict("secondary") })
|
||||
public Long multiConditionalCacheAndEvict(Object arg1) {
|
||||
return counter.getAndIncrement();
|
||||
}
|
||||
@@ -203,9 +203,10 @@ public class DefaultCacheableService implements CacheableService<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CachePut(value="primary", key="#result.id")
|
||||
@CachePut(cacheNames = "primary", key = "#result.id")
|
||||
public TestEntity putRefersToResult(TestEntity arg1) {
|
||||
arg1.setId(Long.MIN_VALUE);
|
||||
return arg1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user