@ -63,6 +63,7 @@ import org.springframework.tests.sample.beans.ITestBean;
import org.springframework.tests.sample.beans.IndexedTestBean ;
import org.springframework.tests.sample.beans.IndexedTestBean ;
import org.springframework.tests.sample.beans.NestedTestBean ;
import org.springframework.tests.sample.beans.NestedTestBean ;
import org.springframework.tests.sample.beans.TestBean ;
import org.springframework.tests.sample.beans.TestBean ;
import org.springframework.util.ReflectionUtils ;
import org.springframework.util.SerializationTestUtils ;
import org.springframework.util.SerializationTestUtils ;
import static org.junit.Assert.* ;
import static org.junit.Assert.* ;
@ -1026,14 +1027,35 @@ public class AutowiredAnnotationBeanPostProcessorTests {
bf . registerBeanDefinition ( "annotatedBean" , new RootBeanDefinition ( ObjectFactoryQualifierInjectionBean . class ) ) ;
bf . registerBeanDefinition ( "annotatedBean" , new RootBeanDefinition ( ObjectFactoryQualifierInjectionBean . class ) ) ;
RootBeanDefinition bd = new RootBeanDefinition ( TestBean . class ) ;
RootBeanDefinition bd = new RootBeanDefinition ( TestBean . class ) ;
bd . addQualifier ( new AutowireCandidateQualifier ( Qualifier . class , "testBean" ) ) ;
bd . addQualifier ( new AutowireCandidateQualifier ( Qualifier . class , "testBean" ) ) ;
bf . registerBeanDefinition ( "test Bean" , bd ) ;
bf . registerBeanDefinition ( "dependency Bean" , bd ) ;
bf . registerBeanDefinition ( "test Bean2" , new RootBeanDefinition ( TestBean . class ) ) ;
bf . registerBeanDefinition ( "dependency Bean2" , new RootBeanDefinition ( TestBean . class ) ) ;
ObjectFactoryQualifierInjectionBean bean = ( ObjectFactoryQualifierInjectionBean ) bf . getBean ( "annotatedBean" ) ;
ObjectFactoryQualifierInjectionBean bean = ( ObjectFactoryQualifierInjectionBean ) bf . getBean ( "annotatedBean" ) ;
assertSame ( bf . getBean ( "testBean" ) , bean . getTestBean ( ) ) ;
assertSame ( bf . getBean ( "dependencyBean" ) , bean . getTestBean ( ) ) ;
bf . destroySingletons ( ) ;
}
@Test
public void testObjectFactoryQualifierProviderInjection ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
bf . setAutowireCandidateResolver ( new QualifierAnnotationAutowireCandidateResolver ( ) ) ;
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
bpp . setBeanFactory ( bf ) ;
bf . addBeanPostProcessor ( bpp ) ;
bf . registerBeanDefinition ( "annotatedBean" , new RootBeanDefinition ( ObjectFactoryQualifierInjectionBean . class ) ) ;
RootBeanDefinition bd = new RootBeanDefinition ( TestBean . class ) ;
bd . setQualifiedElement ( ReflectionUtils . findMethod ( getClass ( ) , "testBeanQualifierProvider" ) ) ;
bf . registerBeanDefinition ( "dependencyBean" , bd ) ;
bf . registerBeanDefinition ( "dependencyBean2" , new RootBeanDefinition ( TestBean . class ) ) ;
ObjectFactoryQualifierInjectionBean bean = ( ObjectFactoryQualifierInjectionBean ) bf . getBean ( "annotatedBean" ) ;
assertSame ( bf . getBean ( "dependencyBean" ) , bean . getTestBean ( ) ) ;
bf . destroySingletons ( ) ;
bf . destroySingletons ( ) ;
}
}
@Qualifier ( "testBean" )
private void testBeanQualifierProvider ( ) { }
@Test
@Test
public void testObjectFactorySerialization ( ) throws Exception {
public void testObjectFactorySerialization ( ) throws Exception {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
@ -1588,11 +1610,12 @@ public class AutowiredAnnotationBeanPostProcessorTests {
rbd . setFactoryBeanName ( "mocksControl" ) ;
rbd . setFactoryBeanName ( "mocksControl" ) ;
rbd . setFactoryMethodName ( "createMock" ) ;
rbd . setFactoryMethodName ( "createMock" ) ;
rbd . getConstructorArgumentValues ( ) . addGenericArgumentValue ( Repository . class ) ;
rbd . getConstructorArgumentValues ( ) . addGenericArgumentValue ( Repository . class ) ;
bf . registerBeanDefinition ( "integerRepo" , rbd ) ;
rbd . setQualifiedElement ( ReflectionUtils . findField ( getClass ( ) , "integerRepositoryQualifierProvider" ) ) ;
bf . registerBeanDefinition ( "integerRepository" , rbd ) ; // Bean name not matching qualifier
RepositoryFieldInjectionBeanWithQualifiers bean = ( RepositoryFieldInjectionBeanWithQualifiers ) bf . getBean ( "annotatedBean" ) ;
RepositoryFieldInjectionBeanWithQualifiers bean = ( RepositoryFieldInjectionBeanWithQualifiers ) bf . getBean ( "annotatedBean" ) ;
Repository < ? > sr = bf . getBean ( "stringRepo" , Repository . class ) ;
Repository < ? > sr = bf . getBean ( "stringRepo" , Repository . class ) ;
Repository < ? > ir = bf . getBean ( "integerRepo" , Repository . class ) ;
Repository < ? > ir = bf . getBean ( "integerRepository " , Repository . class ) ;
assertSame ( sr , bean . stringRepository ) ;
assertSame ( sr , bean . stringRepository ) ;
assertSame ( ir , bean . integerRepository ) ;
assertSame ( ir , bean . integerRepository ) ;
assertSame ( 1 , bean . stringRepositoryArray . length ) ;
assertSame ( 1 , bean . stringRepositoryArray . length ) ;
@ -1606,9 +1629,12 @@ public class AutowiredAnnotationBeanPostProcessorTests {
assertSame ( 1 , bean . stringRepositoryMap . size ( ) ) ;
assertSame ( 1 , bean . stringRepositoryMap . size ( ) ) ;
assertSame ( 1 , bean . integerRepositoryMap . size ( ) ) ;
assertSame ( 1 , bean . integerRepositoryMap . size ( ) ) ;
assertSame ( sr , bean . stringRepositoryMap . get ( "stringRepo" ) ) ;
assertSame ( sr , bean . stringRepositoryMap . get ( "stringRepo" ) ) ;
assertSame ( ir , bean . integerRepositoryMap . get ( "integerRepo" ) ) ;
assertSame ( ir , bean . integerRepositoryMap . get ( "integerRepository " ) ) ;
}
}
@Qualifier ( "integerRepo" )
private Repository < ? > integerRepositoryQualifierProvider ;
@Test
@Test
public void testGenericsBasedFieldInjectionWithSimpleMatch ( ) {
public void testGenericsBasedFieldInjectionWithSimpleMatch ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;