Browse Source

Avoid repeated superclass introspection in findAnnotation(Method,...)

Issue: SPR-16730
pull/1793/head
Juergen Hoeller 7 years ago
parent
commit
d78e27f1e9
  1. 19
      spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java

19
spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java

@ -555,13 +555,18 @@ public abstract class AnnotationUtils { @@ -555,13 +555,18 @@ public abstract class AnnotationUtils {
if (clazz == null || Object.class == clazz) {
break;
}
try {
Method equivalentMethod = clazz.getDeclaredMethod(method.getName(), method.getParameterTypes());
Method resolvedEquivalentMethod = BridgeMethodResolver.findBridgedMethod(equivalentMethod);
result = findAnnotation((AnnotatedElement) resolvedEquivalentMethod, annotationType);
}
catch (NoSuchMethodException ex) {
// No equivalent method found
Set<Method> annotatedMethods = getAnnotatedMethodsInBaseType(clazz);
if (!annotatedMethods.isEmpty()) {
for (Method annotatedMethod : annotatedMethods) {
if (annotatedMethod.getName().equals(method.getName()) &&
Arrays.equals(annotatedMethod.getParameterTypes(), method.getParameterTypes())) {
Method resolvedSuperMethod = BridgeMethodResolver.findBridgedMethod(annotatedMethod);
result = findAnnotation((AnnotatedElement) resolvedSuperMethod, annotationType);
if (result != null) {
break;
}
}
}
}
if (result == null) {
result = searchOnInterfaces(method, annotationType, clazz.getInterfaces());

Loading…
Cancel
Save