checkConfigurationClassCandidate explicitly skips factory method definitions
Issue: SPR-14603
This commit is contained in:
parent
f813a63fd8
commit
1fbd047003
|
@ -79,7 +79,7 @@ abstract class ConfigurationClassUtils {
|
||||||
*/
|
*/
|
||||||
public static boolean checkConfigurationClassCandidate(BeanDefinition beanDef, MetadataReaderFactory metadataReaderFactory) {
|
public static boolean checkConfigurationClassCandidate(BeanDefinition beanDef, MetadataReaderFactory metadataReaderFactory) {
|
||||||
String className = beanDef.getBeanClassName();
|
String className = beanDef.getBeanClassName();
|
||||||
if (className == null) {
|
if (className == null || beanDef.getFactoryMethodName() != null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,9 @@ import org.springframework.beans.factory.annotation.Lookup;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;
|
import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;
|
||||||
import org.springframework.beans.factory.config.BeanDefinitionHolder;
|
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.ChildBeanDefinition;
|
||||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
|
@ -806,6 +809,12 @@ public class ConfigurationClassPostProcessorTests {
|
||||||
ctx.getBean("myTestBean", TestBean.class);
|
ctx.getBean("myTestBean", TestBean.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBeanDefinitionRegistryPostProcessorConfig() {
|
||||||
|
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanDefinitionRegistryPostProcessorConfig.class);
|
||||||
|
assertTrue(ctx.getBean("myTestBean") instanceof TestBean);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -902,8 +911,7 @@ public class ConfigurationClassPostProcessorTests {
|
||||||
@Configuration
|
@Configuration
|
||||||
static class UnloadedConfig {
|
static class UnloadedConfig {
|
||||||
|
|
||||||
public @Bean
|
public @Bean Foo foo() {
|
||||||
Foo foo() {
|
|
||||||
return new Foo();
|
return new Foo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -911,8 +919,7 @@ public class ConfigurationClassPostProcessorTests {
|
||||||
@Configuration
|
@Configuration
|
||||||
static class LoadedConfig {
|
static class LoadedConfig {
|
||||||
|
|
||||||
public @Bean
|
public @Bean Bar bar() {
|
||||||
Bar bar() {
|
|
||||||
return new Bar(new Foo());
|
return new Bar(new Foo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -926,9 +933,7 @@ public class ConfigurationClassPostProcessorTests {
|
||||||
@Configuration
|
@Configuration
|
||||||
public static class ScopedProxyConfigurationClass {
|
public static class ScopedProxyConfigurationClass {
|
||||||
|
|
||||||
@Bean
|
@Bean @Lazy @Scope(proxyMode = ScopedProxyMode.INTERFACES)
|
||||||
@Lazy
|
|
||||||
@Scope(proxyMode = ScopedProxyMode.INTERFACES)
|
|
||||||
public ITestBean scopedClass() {
|
public ITestBean scopedClass() {
|
||||||
return new TestBean();
|
return new TestBean();
|
||||||
}
|
}
|
||||||
|
@ -1517,4 +1522,21 @@ public class ConfigurationClassPostProcessorTests {
|
||||||
public abstract TestBean getTestBean();
|
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…
Reference in New Issue