Browse Source

Skip transaction/caching metadata retrieval for java.lang.Object methods

Also retrieves CacheConfig as merged annotation now, aligned with other caching annotations.

Issue: SPR-15296
pull/828/merge
Juergen Hoeller 8 years ago
parent
commit
d4a1b59b4c
  1. 5
      spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java
  2. 4
      spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java
  3. 6
      spring-tx/src/main/java/org/springframework/transaction/interceptor/AbstractFallbackTransactionAttributeSource.java

5
spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java vendored

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -28,7 +28,6 @@ import org.springframework.cache.interceptor.CacheOperation;
import org.springframework.cache.interceptor.CachePutOperation; import org.springframework.cache.interceptor.CachePutOperation;
import org.springframework.cache.interceptor.CacheableOperation; import org.springframework.cache.interceptor.CacheableOperation;
import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -194,7 +193,7 @@ public class SpringCacheAnnotationParser implements CacheAnnotationParser, Seria
* @return the default config (never {@code null}) * @return the default config (never {@code null})
*/ */
DefaultCacheConfig getDefaultCacheConfig(Class<?> target) { DefaultCacheConfig getDefaultCacheConfig(Class<?> target) {
CacheConfig annotation = AnnotationUtils.getAnnotation(target, CacheConfig.class); CacheConfig annotation = AnnotatedElementUtils.getMergedAnnotation(target, CacheConfig.class);
if (annotation != null) { if (annotation != null) {
return new DefaultCacheConfig(annotation.cacheNames(), annotation.keyGenerator(), return new DefaultCacheConfig(annotation.cacheNames(), annotation.keyGenerator(),
annotation.cacheManager(), annotation.cacheResolver()); annotation.cacheManager(), annotation.cacheResolver());

4
spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java vendored

@ -83,6 +83,10 @@ public abstract class AbstractFallbackCacheOperationSource implements CacheOpera
*/ */
@Override @Override
public Collection<CacheOperation> getCacheOperations(Method method, Class<?> targetClass) { public Collection<CacheOperation> getCacheOperations(Method method, Class<?> targetClass) {
if (method.getDeclaringClass() == Object.class) {
return null;
}
Object cacheKey = getCacheKey(method, targetClass); Object cacheKey = getCacheKey(method, targetClass);
Collection<CacheOperation> cached = this.attributeCache.get(cacheKey); Collection<CacheOperation> cached = this.attributeCache.get(cacheKey);

6
spring-tx/src/main/java/org/springframework/transaction/interceptor/AbstractFallbackTransactionAttributeSource.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -82,6 +82,10 @@ public abstract class AbstractFallbackTransactionAttributeSource implements Tran
*/ */
@Override @Override
public TransactionAttribute getTransactionAttribute(Method method, Class<?> targetClass) { public TransactionAttribute getTransactionAttribute(Method method, Class<?> targetClass) {
if (method.getDeclaringClass() == Object.class) {
return null;
}
// First, see if we have a cached value. // First, see if we have a cached value.
Object cacheKey = getCacheKey(method, targetClass); Object cacheKey = getCacheKey(method, targetClass);
Object cached = this.attributeCache.get(cacheKey); Object cached = this.attributeCache.get(cacheKey);

Loading…
Cancel
Save