Lookup methods work on configuration classes as well
Issue: SPR-15316
(cherry picked from commit fc2e635)
This commit is contained in:
parent
227ac3faa4
commit
77c771e874
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue