Warn about non-static BeanDefinitionRegistryPostProcessor declarations on @Configuration classes
Issue: SPR-14234
(cherry picked from commit 7737c3c)
This commit is contained in:
parent
85675fbe2e
commit
0589c1b4b5
|
|
@ -159,7 +159,7 @@ class ConfigurationClassEnhancer {
|
||||||
* Conditional {@link Callback}.
|
* Conditional {@link Callback}.
|
||||||
* @see ConditionalCallbackFilter
|
* @see ConditionalCallbackFilter
|
||||||
*/
|
*/
|
||||||
private static interface ConditionalCallback extends Callback {
|
private interface ConditionalCallback extends Callback {
|
||||||
|
|
||||||
boolean isMatch(Method candidateMethod);
|
boolean isMatch(Method candidateMethod);
|
||||||
}
|
}
|
||||||
|
|
@ -343,7 +343,8 @@ class ConfigurationClassEnhancer {
|
||||||
// The factory is calling the bean method in order to instantiate and register the bean
|
// The factory is calling the bean method in order to instantiate and register the bean
|
||||||
// (i.e. via a getBean() call) -> invoke the super implementation of the method to actually
|
// (i.e. via a getBean() call) -> invoke the super implementation of the method to actually
|
||||||
// create the bean instance.
|
// create the bean instance.
|
||||||
if (BeanFactoryPostProcessor.class.isAssignableFrom(beanMethod.getReturnType())) {
|
if (logger.isWarnEnabled() &&
|
||||||
|
BeanFactoryPostProcessor.class.isAssignableFrom(beanMethod.getReturnType())) {
|
||||||
logger.warn(String.format("@Bean method %s.%s is non-static and returns an object " +
|
logger.warn(String.format("@Bean method %s.%s is non-static and returns an object " +
|
||||||
"assignable to Spring's BeanFactoryPostProcessor interface. This will " +
|
"assignable to Spring's BeanFactoryPostProcessor interface. This will " +
|
||||||
"result in a failure to process annotations such as @Autowired, " +
|
"result in a failure to process annotations such as @Autowired, " +
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -382,6 +382,12 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
|
||||||
throw new BeanDefinitionStoreException("Cannot enhance @Configuration bean definition '" +
|
throw new BeanDefinitionStoreException("Cannot enhance @Configuration bean definition '" +
|
||||||
beanName + "' since it is not stored in an AbstractBeanDefinition subclass");
|
beanName + "' since it is not stored in an AbstractBeanDefinition subclass");
|
||||||
}
|
}
|
||||||
|
else if (logger.isWarnEnabled() && beanFactory.containsSingleton(beanName)) {
|
||||||
|
logger.warn("Cannot enhance @Configuration bean definition '" + beanName +
|
||||||
|
"' since its singleton instance has been created too early. The typical cause " +
|
||||||
|
"is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor " +
|
||||||
|
"return type: Consider declaring such methods as 'static'.");
|
||||||
|
}
|
||||||
configBeanDefs.put(beanName, (AbstractBeanDefinition) beanDef);
|
configBeanDefs.put(beanName, (AbstractBeanDefinition) beanDef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue