diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index fc19634732..bb48888831 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -271,7 +271,13 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo Set configCandidates = new LinkedHashSet(); for (String beanName : registry.getBeanDefinitionNames()) { BeanDefinition beanDef = registry.getBeanDefinition(beanName); - if (ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef, this.metadataReaderFactory)) { + if (ConfigurationClassUtils.isFullConfigurationClass(beanDef) || + ConfigurationClassUtils.isLiteConfigurationClass(beanDef)) { + if (logger.isDebugEnabled()) { + logger.debug("Bean definition has already been processed as a configuration class: " + beanDef); + } + } + else if (ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef, this.metadataReaderFactory)) { configCandidates.add(new BeanDefinitionHolder(beanDef, beanName)); } } @@ -443,6 +449,6 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo } return pvs; } - } + } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java index 33350cd90c..bfa4c2bbd3 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java @@ -158,4 +158,12 @@ abstract class ConfigurationClassUtils { return CONFIGURATION_CLASS_FULL.equals(beanDef.getAttribute(CONFIGURATION_CLASS_ATTRIBUTE)); } + /** + * Determine whether the given bean definition indicates a lite {@code @Configuration} + * class, through checking {@link #checkConfigurationClassCandidate}'s metadata marker. + */ + public static boolean isLiteConfigurationClass(BeanDefinition beanDef) { + return CONFIGURATION_CLASS_LITE.equals(beanDef.getAttribute(CONFIGURATION_CLASS_ATTRIBUTE)); + } + } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml index 344716316f..ad1694d437 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml @@ -15,4 +15,7 @@ + + +