Skip to content

Commit 1fbd047

Browse files
committed
checkConfigurationClassCandidate explicitly skips factory method definitions
Issue: SPR-14603
1 parent f813a63 commit 1fbd047

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ abstract class ConfigurationClassUtils {
7979
*/
8080
public static boolean checkConfigurationClassCandidate(BeanDefinition beanDef, MetadataReaderFactory metadataReaderFactory) {
8181
String className = beanDef.getBeanClassName();
82-
if (className == null) {
82+
if (className == null || beanDef.getFactoryMethodName() != null) {
8383
return false;
8484
}
8585

spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343
import org.springframework.beans.factory.annotation.Qualifier;
4444
import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;
4545
import org.springframework.beans.factory.config.BeanDefinitionHolder;
46+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
47+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
48+
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
4649
import org.springframework.beans.factory.support.ChildBeanDefinition;
4750
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
4851
import org.springframework.beans.factory.support.RootBeanDefinition;
@@ -806,6 +809,12 @@ public void testNameClashBetweenConfigurationClassAndBean() {
806809
ctx.getBean("myTestBean", TestBean.class);
807810
}
808811

812+
@Test
813+
public void testBeanDefinitionRegistryPostProcessorConfig() {
814+
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanDefinitionRegistryPostProcessorConfig.class);
815+
assertTrue(ctx.getBean("myTestBean") instanceof TestBean);
816+
}
817+
809818

810819
// -------------------------------------------------------------------------
811820

@@ -902,17 +911,15 @@ public Bar(Foo foo) {
902911
@Configuration
903912
static class UnloadedConfig {
904913

905-
public @Bean
906-
Foo foo() {
914+
public @Bean Foo foo() {
907915
return new Foo();
908916
}
909917
}
910918

911919
@Configuration
912920
static class LoadedConfig {
913921

914-
public @Bean
915-
Bar bar() {
922+
public @Bean Bar bar() {
916923
return new Bar(new Foo());
917924
}
918925
}
@@ -926,9 +933,7 @@ public static class ScopedProxyConsumer {
926933
@Configuration
927934
public static class ScopedProxyConfigurationClass {
928935

929-
@Bean
930-
@Lazy
931-
@Scope(proxyMode = ScopedProxyMode.INTERFACES)
936+
@Bean @Lazy @Scope(proxyMode = ScopedProxyMode.INTERFACES)
932937
public ITestBean scopedClass() {
933938
return new TestBean();
934939
}
@@ -1517,4 +1522,21 @@ public TestBean thing() {
15171522
public abstract TestBean getTestBean();
15181523
}
15191524

1525+
@Configuration
1526+
static class BeanDefinitionRegistryPostProcessorConfig {
1527+
1528+
@Bean
1529+
public static BeanDefinitionRegistryPostProcessor bdrpp() {
1530+
return new BeanDefinitionRegistryPostProcessor() {
1531+
@Override
1532+
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
1533+
registry.registerBeanDefinition("myTestBean", new RootBeanDefinition(TestBean.class));
1534+
}
1535+
@Override
1536+
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
1537+
}
1538+
};
1539+
}
1540+
}
1541+
15201542
}

0 commit comments

Comments
 (0)