From 506e9f50d0594aeeeb181f2e4e2d5c358a67f178 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 12 Oct 2012 22:56:08 +0200 Subject: [PATCH] LoadTimeWeaverAware beans are consistently being created early for JPA weaving to work reliably Reverted change for @Bean methods that declare FactoryBean as their return type: The effects of trying to create the FactoryBean to find out about its implementation type are too far-reaching. It's better to recommend declaring a specific return type in the method signature if you want the container to specifically react to your implementation type. Issue: SPR-9857 --- .../factory/support/AbstractAutowireCapableBeanFactory.java | 4 ---- .../context/support/AbstractApplicationContext.java | 2 +- .../configuration/ConfigurationClassProcessingTests.java | 4 ++-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java index 8002dcfc8f3..36c6e824851 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java @@ -588,10 +588,6 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac } } } - if (FactoryBean.class.equals(beanClass) && mbd.isSingleton() && - (typesToMatch.length > 1 || (typesToMatch.length == 1 && !typesToMatch[0].equals(FactoryBean.class)))) { - return getSingletonFactoryBeanForTypeCheck(beanName, mbd).getClass(); - } return beanClass; } diff --git a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index a26a9b9d8c3..8a3aa503e1c 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -910,7 +910,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader } // Initialize LoadTimeWeaverAware beans early to allow for registering their transformers early. - String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, true); + String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false); for (String weaverAwareName : weaverAwareNames) { getBean(weaverAwareName); } diff --git a/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java b/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java index 44b79e6d0e9..11004182c8b 100644 --- a/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java +++ b/org.springframework.context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java @@ -145,8 +145,8 @@ public class ConfigurationClassProcessingTests { assertTrue(factory.isTypeMatch("factoryBean", List.class)); assertEquals(FactoryBean.class, factory.getType("&factoryBean")); assertTrue(factory.isTypeMatch("&factoryBean", FactoryBean.class)); - assertTrue(factory.isTypeMatch("&factoryBean", BeanClassLoaderAware.class)); - assertTrue(factory.isTypeMatch("&factoryBean", ListFactoryBean.class)); + assertFalse(factory.isTypeMatch("&factoryBean", BeanClassLoaderAware.class)); + assertFalse(factory.isTypeMatch("&factoryBean", ListFactoryBean.class)); assertTrue(factory.getBean("factoryBean") instanceof List); String[] beanNames = factory.getBeanNamesForType(FactoryBean.class);