Browse Source

checkConfigurationClassCandidate explicitly skips factory method definitions

Issue: SPR-14603
(cherry picked from commit 1fbd047)
pull/1550/head
Juergen Hoeller 9 years ago
parent
commit
0088922dfd
  1. 4
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java
  2. 36
      spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java

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

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -79,7 +79,7 @@ abstract class ConfigurationClassUtils { @@ -79,7 +79,7 @@ abstract class ConfigurationClassUtils {
*/
public static boolean checkConfigurationClassCandidate(BeanDefinition beanDef, MetadataReaderFactory metadataReaderFactory) {
String className = beanDef.getBeanClassName();
if (className == null) {
if (className == null || beanDef.getFactoryMethodName() != null) {
return false;
}

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

@ -43,6 +43,9 @@ import org.springframework.beans.factory.annotation.Lookup; @@ -43,6 +43,9 @@ import org.springframework.beans.factory.annotation.Lookup;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.ChildBeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
@ -794,6 +797,12 @@ public class ConfigurationClassPostProcessorTests { @@ -794,6 +797,12 @@ public class ConfigurationClassPostProcessorTests {
ctx.getBean("myTestBean", TestBean.class);
}
@Test
public void testBeanDefinitionRegistryPostProcessorConfig() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanDefinitionRegistryPostProcessorConfig.class);
assertTrue(ctx.getBean("myTestBean") instanceof TestBean);
}
// -------------------------------------------------------------------------
@ -860,8 +869,7 @@ public class ConfigurationClassPostProcessorTests { @@ -860,8 +869,7 @@ public class ConfigurationClassPostProcessorTests {
@Configuration
static class UnloadedConfig {
public @Bean
Foo foo() {
public @Bean Foo foo() {
return new Foo();
}
}
@ -869,8 +877,7 @@ public class ConfigurationClassPostProcessorTests { @@ -869,8 +877,7 @@ public class ConfigurationClassPostProcessorTests {
@Configuration
static class LoadedConfig {
public @Bean
Bar bar() {
public @Bean Bar bar() {
return new Bar(new Foo());
}
}
@ -884,9 +891,7 @@ public class ConfigurationClassPostProcessorTests { @@ -884,9 +891,7 @@ public class ConfigurationClassPostProcessorTests {
@Configuration
public static class ScopedProxyConfigurationClass {
@Bean
@Lazy
@Scope(proxyMode = ScopedProxyMode.INTERFACES)
@Bean @Lazy @Scope(proxyMode = ScopedProxyMode.INTERFACES)
public ITestBean scopedClass() {
return new TestBean();
}
@ -1475,4 +1480,21 @@ public class ConfigurationClassPostProcessorTests { @@ -1475,4 +1480,21 @@ public class ConfigurationClassPostProcessorTests {
public abstract TestBean getTestBean();
}
@Configuration
static class BeanDefinitionRegistryPostProcessorConfig {
@Bean
public static BeanDefinitionRegistryPostProcessor bdrpp() {
return new BeanDefinitionRegistryPostProcessor() {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
registry.registerBeanDefinition("myTestBean", new RootBeanDefinition(TestBean.class));
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
}
};
}
}
}

Loading…
Cancel
Save