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 39c017f8b9a..8281e51617f 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 @@ -80,6 +80,8 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo private boolean setMetadataReaderFactoryCalled = false; + private boolean postProcessBeanDefinitionRegistryCalled = false; + /** * Set the {@link SourceExtractor} to use for generated bean definitions @@ -126,6 +128,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo * Derive further bean definitions from the configuration classes in the registry. */ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { + this.postProcessBeanDefinitionRegistryCalled = true; processConfigBeanDefinitions(registry); } @@ -134,9 +137,15 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo * by replacing them with CGLIB-enhanced subclasses. */ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { + if (!this.postProcessBeanDefinitionRegistryCalled) { + // BeanDefinitionRegistryPostProcessor hook apparently not supported... + // Simply call processConfigBeanDefinitions lazily at this point then. + processConfigBeanDefinitions((BeanDefinitionRegistry) beanFactory); + } enhanceConfigurationClasses(beanFactory); } + /** * Build and validate a configuration model based on the registry of * {@link Configuration} classes.