提交 fc2e635c 编写于 作者: J Juergen Hoeller

Lookup methods work on configuration classes as well

Issue: SPR-15316
上级 8b741508
......@@ -270,13 +270,13 @@ class ConfigurationClassEnhancer {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
Field field = obj.getClass().getDeclaredField(BEAN_FACTORY_FIELD);
Field field = ReflectionUtils.findField(obj.getClass(), BEAN_FACTORY_FIELD);
Assert.state(field != null, "Unable to find generated BeanFactory field");
field.set(obj, args[0]);
// Does the actual (non-CGLIB) superclass actually implement BeanFactoryAware?
// Does the actual (non-CGLIB) superclass implement BeanFactoryAware?
// If so, call its setBeanFactory() method. If not, just exit.
if (BeanFactoryAware.class.isAssignableFrom(obj.getClass().getSuperclass())) {
if (BeanFactoryAware.class.isAssignableFrom(ClassUtils.getUserClass(obj.getClass().getSuperclass()))) {
return proxy.invokeSuper(obj, args);
}
return null;
......
......@@ -39,6 +39,7 @@ import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.beans.factory.annotation.Lookup;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
......@@ -779,6 +780,14 @@ public class ConfigurationClassPostProcessorTests {
assertSame(ctx.getBean(TestBean.class), bean.testBeans.get(0));
}
@Test
public void testBeanLookupFromSameConfigurationClass() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanLookupConfiguration.class);
BeanLookupConfiguration bean = ctx.getBean(BeanLookupConfiguration.class);
assertNotNull(bean.getTestBean());
assertSame(ctx.getBean(TestBean.class), bean.getTestBean());
}
// -------------------------------------------------------------------------
......@@ -1448,4 +1457,16 @@ public class ConfigurationClassPostProcessorTests {
}
}
@Configuration
static abstract class BeanLookupConfiguration {
@Bean
public TestBean thing() {
return new TestBean();
}
@Lookup
public abstract TestBean getTestBean();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册