From 65ba72f1fc61c5424564cc94267d9a0733645851 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 16 Apr 2015 18:16:03 +0200 Subject: [PATCH] FactoryBean type check logs currently-in-creation exception at debug level Issue: SPR-12900 --- .../beans/factory/support/AbstractBeanFactory.java | 12 +++++++++--- .../beans/factory/FactoryBeanTests.java | 8 +++++++- .../factory/FactoryBeanTests-withAutowiring.xml | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 00eab29578..8853e4daf8 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -1451,9 +1451,15 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp return getTypeForFactoryBean(factoryBean); } catch (BeanCreationException ex) { - // Can only happen when getting a FactoryBean. - if (logger.isWarnEnabled()) { - logger.warn("Bean creation exception on FactoryBean type check: " + ex); + if (ex instanceof BeanCurrentlyInCreationException) { + if (logger.isDebugEnabled()) { + 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); return null; diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests.java index 14a4eb63d0..c731260f65 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests.java @@ -38,7 +38,7 @@ import static org.springframework.tests.TestResourceUtils.*; * @author Juergen Hoeller * @author Chris Beams */ -public final class FactoryBeanTests { +public class FactoryBeanTests { private static final Class CLASS = FactoryBeanTests.class; 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"); ppc.postProcessBeanFactory(factory); + assertNull(factory.getType("betaFactory")); + Alpha alpha = (Alpha) factory.getBean("alpha"); Beta beta = (Beta) factory.getBean("beta"); Gamma gamma = (Gamma) factory.getBean("gamma"); Gamma gamma2 = (Gamma) factory.getBean("gammaFactory"); + assertSame(beta, alpha.getBeta()); assertSame(gamma, beta.getGamma()); assertSame(gamma2, beta.getGamma()); @@ -194,6 +197,9 @@ public final class FactoryBeanTests { @Component public static class BetaFactoryBean implements FactoryBean { + public BetaFactoryBean(Alpha alpha) { + } + private Beta beta; public void setBeta(Beta beta) { diff --git a/spring-beans/src/test/resources/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml b/spring-beans/src/test/resources/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml index 13f328c373..0f16664044 100644 --- a/spring-beans/src/test/resources/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml +++ b/spring-beans/src/test/resources/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml @@ -11,7 +11,7 @@ - +