diff --git a/org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index 75d029d083b..32170d76dbd 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -222,7 +222,8 @@ public class ConfigurationClassPostProcessor implements BeanFactoryPostProcessor beanDef.setAttribute(CONFIGURATION_CLASS_ATTRIBUTE, CONFIGURATION_CLASS_FULL); return true; } - else if (metadata.isAnnotated(Component.class.getName())) { + else if (metadata.isAnnotated(Component.class.getName()) || + metadata.hasAnnotatedMethods(Bean.class.getName())) { beanDef.setAttribute(CONFIGURATION_CLASS_ATTRIBUTE, CONFIGURATION_CLASS_LITE); return true; } diff --git a/org.springframework.core/src/main/java/org/springframework/core/type/AnnotationMetadata.java b/org.springframework.core/src/main/java/org/springframework/core/type/AnnotationMetadata.java index 3366030cd23..8d2e9431791 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/type/AnnotationMetadata.java +++ b/org.springframework.core/src/main/java/org/springframework/core/type/AnnotationMetadata.java @@ -83,6 +83,12 @@ public interface AnnotationMetadata extends ClassMetadata { */ Map getAnnotationAttributes(String annotationType); + /** + * Determine whether the underlying class has any methods that are + * annotated (or meta-annotated) with the given annotation type. + */ + boolean hasAnnotatedMethods(String annotationType); + /** * Retrieve the method metadata for all methods that are annotated * (or meta-annotated) with the given annotation type. diff --git a/org.springframework.core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java b/org.springframework.core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java index 100e30516bc..736cdf14f5b 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java +++ b/org.springframework.core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java @@ -128,6 +128,25 @@ public class StandardAnnotationMetadata extends StandardClassMetadata implements return null; } + public boolean hasAnnotatedMethods(String annotationType) { + Method[] methods = getIntrospectedClass().getDeclaredMethods(); + for (Method method : methods) { + for (Annotation ann : method.getAnnotations()) { + if (ann.annotationType().getName().equals(annotationType)) { + return true; + } + else { + for (Annotation metaAnn : ann.annotationType().getAnnotations()) { + if (metaAnn.annotationType().getName().equals(annotationType)) { + return true; + } + } + } + } + } + return false; + } + public Set getAnnotatedMethods(String annotationType) { Method[] methods = getIntrospectedClass().getDeclaredMethods(); Set annotatedMethods = new LinkedHashSet(); diff --git a/org.springframework.core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java b/org.springframework.core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java index 26eeffc4914..05548489492 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java +++ b/org.springframework.core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java @@ -100,6 +100,15 @@ final class AnnotationMetadataReadingVisitor extends ClassMetadataReadingVisitor return this.attributeMap.get(annotationType); } + public boolean hasAnnotatedMethods(String annotationType) { + for (MethodMetadata method : this.methodMetadataSet) { + if (method.isAnnotated(annotationType)) { + return true; + } + } + return false; + } + public Set getAnnotatedMethods(String annotationType) { Set annotatedMethods = new LinkedHashSet(); for (MethodMetadata method : this.methodMetadataSet) {