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 cb53fcbc5d..11436e4ab4 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -1422,9 +1422,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-withAutowiring.xml b/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml index 13f328c373..0f16664044 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml +++ b/spring-beans/src/test/java/org/springframework/beans/factory/FactoryBeanTests-withAutowiring.xml @@ -11,7 +11,7 @@ - + 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 776cb3763e..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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -22,7 +22,6 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.Test; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -39,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"); @@ -47,6 +46,7 @@ public final class FactoryBeanTests { private static final Resource ABSTRACT_CONTEXT = qualifiedResource(CLASS, "abstract.xml"); private static final Resource CIRCULAR_CONTEXT = qualifiedResource(CLASS, "circular.xml"); + @Test public void testFactoryBeanReturnsNull() throws Exception { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); @@ -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) { @@ -238,12 +244,12 @@ public final class FactoryBeanTests { public void setInstanceName(String instanceName) { this.instanceName = instanceName; } + @Override - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + public void setBeanFactory(BeanFactory beanFactory) { this.beanFactory = beanFactory; } - @Override public T getObject() { if (instance == null) {