ConfigurationClassPostProcessor skips pre-processed bean definitions now (avoiding side effects in case of multiple CCPPs)
Issue: SPR-11858
This commit is contained in:
parent
d239016a8c
commit
b6255128bf
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue