@ -1,5 +1,5 @@
@@ -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 .
@ -556,6 +556,38 @@ public class AutowiredAnnotationBeanPostProcessorTests {
@@ -556,6 +556,38 @@ public class AutowiredAnnotationBeanPostProcessorTests {
assertSame ( bf , bean . getBeanFactory ( ) ) ;
}
@Test
public void testConstructorResourceInjectionWithNull ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
bf . registerResolvableDependency ( BeanFactory . class , bf ) ;
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
bpp . setBeanFactory ( bf ) ;
bf . addBeanPostProcessor ( bpp ) ;
RootBeanDefinition bd = new RootBeanDefinition ( ConstructorResourceInjectionBean . class ) ;
bd . setScope ( RootBeanDefinition . SCOPE_PROTOTYPE ) ;
bf . registerBeanDefinition ( "annotatedBean" , bd ) ;
TestBean tb = new TestBean ( ) ;
bf . registerSingleton ( "testBean" , tb ) ;
bf . registerBeanDefinition ( "nestedTestBean" , new RootBeanDefinition ( NullNestedTestBeanFactoryBean . class ) ) ;
bf . registerSingleton ( "nestedTestBean2" , new NestedTestBean ( ) ) ;
ConstructorResourceInjectionBean bean = ( ConstructorResourceInjectionBean ) bf . getBean ( "annotatedBean" ) ;
assertSame ( tb , bean . getTestBean ( ) ) ;
assertSame ( tb , bean . getTestBean2 ( ) ) ;
assertSame ( tb , bean . getTestBean3 ( ) ) ;
assertSame ( tb , bean . getTestBean4 ( ) ) ;
assertNull ( bean . getNestedTestBean ( ) ) ;
assertSame ( bf , bean . getBeanFactory ( ) ) ;
bean = ( ConstructorResourceInjectionBean ) bf . getBean ( "annotatedBean" ) ;
assertSame ( tb , bean . getTestBean ( ) ) ;
assertSame ( tb , bean . getTestBean2 ( ) ) ;
assertSame ( tb , bean . getTestBean3 ( ) ) ;
assertSame ( tb , bean . getTestBean4 ( ) ) ;
assertNull ( bean . getNestedTestBean ( ) ) ;
assertSame ( bf , bean . getBeanFactory ( ) ) ;
}
@Test
public void testConstructorResourceInjectionWithMultipleCandidates ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
@ -2869,4 +2901,23 @@ public class AutowiredAnnotationBeanPostProcessorTests {
@@ -2869,4 +2901,23 @@ public class AutowiredAnnotationBeanPostProcessorTests {
}
}
public static class NullNestedTestBeanFactoryBean implements FactoryBean < NestedTestBean > {
@Override
public NestedTestBean getObject ( ) {
return null ;
}
@Override
public Class < ? > getObjectType ( ) {
return NestedTestBean . class ;
}
@Override
public boolean isSingleton ( ) {
return true ;
}
}
}