Lookup methods work on configuration classes as well
Issue: SPR-15316
This commit is contained in:
		
							parent
							
								
									8b741508a6
								
							
						
					
					
						commit
						fc2e635c05
					
				| 
						 | 
				
			
			@ -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