FactoryBean type check logs currently-in-creation exception at debug level

Issue: SPR-12900
This commit is contained in:
Juergen Hoeller 2015-04-16 18:16:03 +02:00
parent aa49949d7a
commit 65ba72f1fc
3 changed files with 17 additions and 5 deletions

View File

@ -1451,9 +1451,15 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp
return getTypeForFactoryBean(factoryBean); return getTypeForFactoryBean(factoryBean);
} }
catch (BeanCreationException ex) { catch (BeanCreationException ex) {
// Can only happen when getting a FactoryBean. if (ex instanceof BeanCurrentlyInCreationException) {
if (logger.isWarnEnabled()) { if (logger.isDebugEnabled()) {
logger.warn("Bean creation exception on FactoryBean type check: " + ex); logger.debug("Bean currently in creation on FactoryBean type check: " + ex);
}
}
else {
if (logger.isWarnEnabled()) {
logger.warn("Bean creation exception on FactoryBean type check: " + ex);
}
} }
onSuppressedException(ex); onSuppressedException(ex);
return null; return null;

View File

@ -38,7 +38,7 @@ import static org.springframework.tests.TestResourceUtils.*;
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Chris Beams * @author Chris Beams
*/ */
public final class FactoryBeanTests { public class FactoryBeanTests {
private static final Class<?> CLASS = FactoryBeanTests.class; private static final Class<?> CLASS = FactoryBeanTests.class;
private static final Resource RETURNS_NULL_CONTEXT = qualifiedResource(CLASS, "returnsNull.xml"); private static final Resource RETURNS_NULL_CONTEXT = qualifiedResource(CLASS, "returnsNull.xml");
@ -63,10 +63,13 @@ public final class FactoryBeanTests {
BeanFactoryPostProcessor ppc = (BeanFactoryPostProcessor) factory.getBean("propertyPlaceholderConfigurer"); BeanFactoryPostProcessor ppc = (BeanFactoryPostProcessor) factory.getBean("propertyPlaceholderConfigurer");
ppc.postProcessBeanFactory(factory); ppc.postProcessBeanFactory(factory);
assertNull(factory.getType("betaFactory"));
Alpha alpha = (Alpha) factory.getBean("alpha"); Alpha alpha = (Alpha) factory.getBean("alpha");
Beta beta = (Beta) factory.getBean("beta"); Beta beta = (Beta) factory.getBean("beta");
Gamma gamma = (Gamma) factory.getBean("gamma"); Gamma gamma = (Gamma) factory.getBean("gamma");
Gamma gamma2 = (Gamma) factory.getBean("gammaFactory"); Gamma gamma2 = (Gamma) factory.getBean("gammaFactory");
assertSame(beta, alpha.getBeta()); assertSame(beta, alpha.getBeta());
assertSame(gamma, beta.getGamma()); assertSame(gamma, beta.getGamma());
assertSame(gamma2, beta.getGamma()); assertSame(gamma2, beta.getGamma());
@ -194,6 +197,9 @@ public final class FactoryBeanTests {
@Component @Component
public static class BetaFactoryBean implements FactoryBean<Object> { public static class BetaFactoryBean implements FactoryBean<Object> {
public BetaFactoryBean(Alpha alpha) {
}
private Beta beta; private Beta beta;
public void setBeta(Beta beta) { public void setBeta(Beta beta) {

View File

@ -11,7 +11,7 @@
<bean id="gamma" class="org.springframework.beans.factory.FactoryBeanTests$Gamma"/> <bean id="gamma" class="org.springframework.beans.factory.FactoryBeanTests$Gamma"/>
<bean id="betaFactory" class="org.springframework.beans.factory.FactoryBeanTests$BetaFactoryBean"> <bean id="betaFactory" class="org.springframework.beans.factory.FactoryBeanTests$BetaFactoryBean" autowire="constructor">
<property name="beta" ref="beta"/> <property name="beta" ref="beta"/>
</bean> </bean>