diff --git a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index b1ea997b40e..6b150325d50 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -573,16 +573,16 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader // Invoke BeanDefinitionRegistryPostProcessors first, if any. if (beanFactory instanceof BeanDefinitionRegistry) { BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; + Collection registryPostProcessors = + beanFactory.getBeansOfType(BeanDefinitionRegistryPostProcessor.class, true, false).values(); + for (BeanDefinitionRegistryPostProcessor postProcessor : registryPostProcessors) { + postProcessor.postProcessBeanFactory(beanFactory); + } for (BeanFactoryPostProcessor postProcessor : getBeanFactoryPostProcessors()) { if (postProcessor instanceof BeanDefinitionRegistryPostProcessor) { ((BeanDefinitionRegistryPostProcessor) postProcessor).postProcessBeanDefinitionRegistry(registry); } } - Collection registryPostProcessors = - beanFactory.getBeansOfType(BeanDefinitionRegistryPostProcessor.class, true, false).values(); - for (BeanDefinitionRegistryPostProcessor postProcessor : registryPostProcessors) { - postProcessor.postProcessBeanDefinitionRegistry(registry); - } } // Invoke factory processors registered with the context instance. diff --git a/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/Spr7167Tests.java b/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/Spr7167Tests.java new file mode 100644 index 00000000000..11ec4af5814 --- /dev/null +++ b/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/Spr7167Tests.java @@ -0,0 +1,58 @@ +package org.springframework.context.annotation.configuration; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.springframework.aop.support.AopUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +public class Spr7167Tests { + @Test + public void test() { + ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfig.class); + + assertThat("someDependency was not post processed", + ctx.getBeanFactory().getBeanDefinition("someDependency").getDescription(), + equalTo("post processed by MyPostProcessor")); + + MyConfig config = ctx.getBean(MyConfig.class); + assertTrue("Config class was not enhanced", AopUtils.isCglibProxyClass(config.getClass())); + } +} + +@Configuration +class MyConfig { + + @Bean + public Dependency someDependency() { + return new Dependency(); + } + + @Bean + public BeanFactoryPostProcessor thePostProcessor() { + return new MyPostProcessor(someDependency()); + } +} + +class Dependency { +} + +class MyPostProcessor implements BeanFactoryPostProcessor { + + public MyPostProcessor(Dependency someDependency) { + } + + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + AbstractBeanDefinition bd = (AbstractBeanDefinition) beanFactory.getBeanDefinition("someDependency"); + bd.setDescription("post processed by MyPostProcessor"); + } +} \ No newline at end of file