Skip to content

Commit

Permalink
Local merged annotation lookup in SpringCacheAnnotationParser
Browse files Browse the repository at this point in the history
Issue: SPR-14781
Issue: SPR-14801
(cherry picked from commit 08972ef)
  • Loading branch information
jhoeller committed Oct 31, 2016
1 parent 5578a2e commit 3cca57a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 11 deletions.
Expand Up @@ -62,28 +62,28 @@ public Collection<CacheOperation> parseCacheAnnotations(Method method) {
protected Collection<CacheOperation> parseCacheAnnotations(DefaultCacheConfig cachingConfig, AnnotatedElement ae) {
Collection<CacheOperation> ops = null;

Collection<Cacheable> cacheables = AnnotatedElementUtils.findAllMergedAnnotations(ae, Cacheable.class);
Collection<Cacheable> cacheables = AnnotatedElementUtils.getAllMergedAnnotations(ae, Cacheable.class);
if (!cacheables.isEmpty()) {
ops = lazyInit(ops);
for (Cacheable cacheable : cacheables) {
ops.add(parseCacheableAnnotation(ae, cachingConfig, cacheable));
}
}
Collection<CacheEvict> evicts = AnnotatedElementUtils.findAllMergedAnnotations(ae, CacheEvict.class);
Collection<CacheEvict> evicts = AnnotatedElementUtils.getAllMergedAnnotations(ae, CacheEvict.class);
if (!evicts.isEmpty()) {
ops = lazyInit(ops);
for (CacheEvict evict : evicts) {
ops.add(parseEvictAnnotation(ae, cachingConfig, evict));
}
}
Collection<CachePut> puts = AnnotatedElementUtils.findAllMergedAnnotations(ae, CachePut.class);
Collection<CachePut> puts = AnnotatedElementUtils.getAllMergedAnnotations(ae, CachePut.class);
if (!puts.isEmpty()) {
ops = lazyInit(ops);
for (CachePut put : puts) {
ops.add(parsePutAnnotation(ae, cachingConfig, put));
}
}
Collection<Caching> cachings = AnnotatedElementUtils.findAllMergedAnnotations(ae, Caching.class);
Collection<Caching> cachings = AnnotatedElementUtils.getAllMergedAnnotations(ae, Caching.class);
if (!cachings.isEmpty()) {
ops = lazyInit(ops);
for (Caching caching : cachings) {
Expand Down
Expand Up @@ -75,7 +75,7 @@ public void caching() throws Exception {

@Test
public void emptyCaching() throws Exception {
Collection<CacheOperation> ops = getOps(AnnotatedClass.class, "emptyCaching", 0);
getOps(AnnotatedClass.class, "emptyCaching", 0);
}

@Test
Expand Down Expand Up @@ -155,7 +155,7 @@ public void customKeyGeneratorInherited() {

@Test
public void keyAndKeyGeneratorCannotBeSetTogether() {
exception.expect(IllegalStateException.class);
this.exception.expect(IllegalStateException.class);
getOps(AnnotatedClass.class, "invalidKeyAndKeyGeneratorSet");
}

Expand Down Expand Up @@ -189,7 +189,7 @@ public void customCacheResolverInherited() {

@Test
public void cacheResolverAndCacheManagerCannotBeSetTogether() {
exception.expect(IllegalStateException.class);
this.exception.expect(IllegalStateException.class);
getOps(AnnotatedClass.class, "invalidCacheResolverAndCacheManagerSet");
}

Expand Down Expand Up @@ -244,6 +244,22 @@ public void severalCacheConfigUseClosest() {
assertSharedConfig(cacheOperation, "", "", "", "myCache");
}

@Test
public void cacheConfigFromInterface() {
assertNull(getOps(InterfaceCacheConfig.class, "interfaceCacheConfig"));
Collection<CacheOperation> ops = getOps(CacheConfigIfc.class, "interfaceCacheConfig");
CacheOperation cacheOperation = ops.iterator().next();
assertSharedConfig(cacheOperation, "", "", "", "myCache");
}

@Test
public void cacheAnnotationOverride() {
Collection<CacheOperation> ops = getOps(InterfaceCacheConfig.class, "interfaceCacheableOverride");
assertSame(1, ops.size());
CacheOperation cacheOperation = ops.iterator().next();
assertTrue(cacheOperation instanceof CacheableOperation);
}

@Test
public void partialClassLevelWithCustomCacheManager() {
Collection<CacheOperation> ops = getOps(AnnotatedClassWithSomeDefault.class, "methodLevelCacheManager", 1);
Expand Down Expand Up @@ -275,7 +291,7 @@ private Collection<CacheOperation> getOps(Class<?> target, String name, int expe
private Collection<CacheOperation> getOps(Class<?> target, String name) {
try {
Method method = target.getMethod(name);
return source.getCacheOperations(method, target);
return this.source.getCacheOperations(method, target);
}
catch (NoSuchMethodException ex) {
throw new IllegalStateException(ex);
Expand Down Expand Up @@ -430,7 +446,7 @@ public void noCustomization() {


@CacheConfigFoo
@CacheConfig(cacheNames = "myCache") // multiple sources
@CacheConfig(cacheNames = "myCache") // multiple sources
private static class MultipleCacheConfig {

@Cacheable
Expand All @@ -439,6 +455,30 @@ public void multipleCacheConfig() {
}


@CacheConfig(cacheNames = "myCache")
private interface CacheConfigIfc {

@Cacheable
void interfaceCacheConfig();

@CachePut
void interfaceCacheableOverride();
}


private static class InterfaceCacheConfig implements CacheConfigIfc {

@Override
public void interfaceCacheConfig() {
}

@Override
@Cacheable
public void interfaceCacheableOverride() {
}
}


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Cacheable("foo")
Expand Down Expand Up @@ -491,7 +531,7 @@ public void multipleCacheConfig() {


@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
@Target({ElementType.METHOD, ElementType.TYPE})
@Cacheable(cacheNames = "shadowed cache name", key = "shadowed key")
@interface ComposedCacheable {

Expand All @@ -507,7 +547,7 @@ public void multipleCacheConfig() {


@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
@Target({ElementType.METHOD, ElementType.TYPE})
@CacheEvict(cacheNames = "shadowed cache name", key = "shadowed key")
@interface ComposedCacheEvict {

Expand Down

0 comments on commit 3cca57a

Please sign in to comment.