Avoid unnecessary annotation introspection on framework methods

Issue: SPR-16933
This commit is contained in:
Juergen Hoeller
2018-08-07 02:11:54 +02:00
parent c814f5821a
commit 34052945de
2 changed files with 13 additions and 6 deletions

View File

@@ -189,8 +189,8 @@ class ConfigurationClassEnhancer {
@Override
public int accept(Method method) {
for (int i = 0; i < this.callbacks.length; i++) {
if (!(this.callbacks[i] instanceof ConditionalCallback) ||
((ConditionalCallback) this.callbacks[i]).isMatch(method)) {
Callback callback = this.callbacks[i];
if (!(callback instanceof ConditionalCallback) || ((ConditionalCallback) callback).isMatch(method)) {
return i;
}
}
@@ -286,6 +286,10 @@ class ConfigurationClassEnhancer {
@Override
public boolean isMatch(Method candidateMethod) {
return isSetBeanFactory(candidateMethod);
}
public static boolean isSetBeanFactory(Method candidateMethod) {
return (candidateMethod.getName().equals("setBeanFactory") &&
candidateMethod.getParameterCount() == 1 &&
BeanFactory.class == candidateMethod.getParameterTypes()[0] &&
@@ -432,6 +436,7 @@ class ConfigurationClassEnhancer {
@Override
public boolean isMatch(Method candidateMethod) {
return (candidateMethod.getDeclaringClass() != Object.class &&
!BeanFactoryAwareMethodInterceptor.isSetBeanFactory(candidateMethod) &&
BeanAnnotationHelper.isBeanAnnotated(candidateMethod));
}

View File

@@ -640,11 +640,13 @@ public abstract class AnnotationUtils {
if (anns.length == 0) {
return false;
}
if (anns.length == 1) {
Class<?> annType = anns[0].annotationType();
return (annType != Nullable.class && annType != Deprecated.class);
for (Annotation ann : anns) {
Class<?> annType = ann.annotationType();
if (annType != Nullable.class && annType != Deprecated.class) {
return true;
}
}
return true;
return false;
}
private static boolean isOverride(Method method, Method candidate) {