ConfigurationClassPostProcessor skips pre-processed bean definitions now (avoiding side effects in case of multiple CCPPs)
Issue: SPR-11858
This commit is contained in:
@@ -271,7 +271,13 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
|
||||
Set<BeanDefinitionHolder> configCandidates = new LinkedHashSet<BeanDefinitionHolder>();
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,4 +15,7 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- should not cause infinite loop (SPR-11858) but rather simply be ignored -->
|
||||
<bean class="org.springframework.context.annotation.ConfigurationClassPostProcessor"/>
|
||||
|
||||
</beans>
|
||||
|
||||
Reference in New Issue
Block a user