@ -1268,9 +1268,9 @@ public class AutowiredAnnotationBeanPostProcessorTests {
@@ -1268,9 +1268,9 @@ public class AutowiredAnnotationBeanPostProcessorTests {
rbd . getConstructorArgumentValues ( ) . addGenericArgumentValue ( Repository . class ) ;
bf . registerBeanDefinition ( "integerRepo" , rbd ) ;
RepositoryFieldInjectionBeanWithQualifiers bean = ( RepositoryFieldInjectionBeanWithQualifiers ) bf . getBean ( "annotatedBean" ) ;
Repository sr = bf . getBean ( "stringRepo" , Repository . class ) ;
Repository ir = bf . getBean ( "integerRepo" , Repository . class ) ;
RepositoryFieldInjectionBeanWithQualifiers bean = ( RepositoryFieldInjectionBeanWithQualifiers ) bf . getBean ( "annotatedBean" ) ;
assertSame ( sr , bean . stringRepository ) ;
assertSame ( ir , bean . integerRepository ) ;
assertSame ( 1 , bean . stringRepositoryArray . length ) ;
@ -1287,6 +1287,74 @@ public class AutowiredAnnotationBeanPostProcessorTests {
@@ -1287,6 +1287,74 @@ public class AutowiredAnnotationBeanPostProcessorTests {
assertSame ( ir , bean . integerRepositoryMap . get ( "integerRepo" ) ) ;
}
@Test
public void testGenericsBasedFieldInjectionWithSimpleMatch ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
bf . setAutowireCandidateResolver ( new QualifierAnnotationAutowireCandidateResolver ( ) ) ;
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
bpp . setBeanFactory ( bf ) ;
bf . addBeanPostProcessor ( bpp ) ;
RootBeanDefinition bd = new RootBeanDefinition ( RepositoryFieldInjectionBeanWithSimpleMatch . class ) ;
bd . setScope ( RootBeanDefinition . SCOPE_PROTOTYPE ) ;
bf . registerBeanDefinition ( "annotatedBean" , bd ) ;
bf . registerSingleton ( "repo" , new StringRepository ( ) ) ;
RepositoryFieldInjectionBeanWithSimpleMatch bean = ( RepositoryFieldInjectionBeanWithSimpleMatch ) bf . getBean ( "annotatedBean" ) ;
Repository repo = bf . getBean ( "repo" , Repository . class ) ;
assertSame ( repo , bean . repository ) ;
assertSame ( repo , bean . stringRepository ) ;
assertSame ( 1 , bean . repositoryArray . length ) ;
assertSame ( 1 , bean . stringRepositoryArray . length ) ;
assertSame ( repo , bean . repositoryArray [ 0 ] ) ;
assertSame ( repo , bean . stringRepositoryArray [ 0 ] ) ;
assertSame ( 1 , bean . repositoryList . size ( ) ) ;
assertSame ( 1 , bean . stringRepositoryList . size ( ) ) ;
assertSame ( repo , bean . repositoryList . get ( 0 ) ) ;
assertSame ( repo , bean . stringRepositoryList . get ( 0 ) ) ;
assertSame ( 1 , bean . repositoryMap . size ( ) ) ;
assertSame ( 1 , bean . stringRepositoryMap . size ( ) ) ;
assertSame ( repo , bean . repositoryMap . get ( "repo" ) ) ;
assertSame ( repo , bean . stringRepositoryMap . get ( "repo" ) ) ;
}
@Test
public void testGenericsBasedFieldInjectionWithSimpleMatchAndMock ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
bf . setAutowireCandidateResolver ( new QualifierAnnotationAutowireCandidateResolver ( ) ) ;
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ( ) ;
bpp . setBeanFactory ( bf ) ;
bf . addBeanPostProcessor ( bpp ) ;
RootBeanDefinition bd = new RootBeanDefinition ( RepositoryFieldInjectionBeanWithSimpleMatch . class ) ;
bd . setScope ( RootBeanDefinition . SCOPE_PROTOTYPE ) ;
bf . registerBeanDefinition ( "annotatedBean" , bd ) ;
RootBeanDefinition rbd = new RootBeanDefinition ( MocksControl . class ) ;
bf . registerBeanDefinition ( "mocksControl" , rbd ) ;
rbd = new RootBeanDefinition ( ) ;
rbd . setFactoryBeanName ( "mocksControl" ) ;
rbd . setFactoryMethodName ( "createMock" ) ;
rbd . getConstructorArgumentValues ( ) . addGenericArgumentValue ( Repository . class ) ;
bf . registerBeanDefinition ( "repo" , rbd ) ;
RepositoryFieldInjectionBeanWithSimpleMatch bean = ( RepositoryFieldInjectionBeanWithSimpleMatch ) bf . getBean ( "annotatedBean" ) ;
Repository repo = bf . getBean ( "repo" , Repository . class ) ;
assertSame ( repo , bean . repository ) ;
assertSame ( repo , bean . stringRepository ) ;
assertSame ( 1 , bean . repositoryArray . length ) ;
assertSame ( 1 , bean . stringRepositoryArray . length ) ;
assertSame ( repo , bean . repositoryArray [ 0 ] ) ;
assertSame ( repo , bean . stringRepositoryArray [ 0 ] ) ;
assertSame ( 1 , bean . repositoryList . size ( ) ) ;
assertSame ( 1 , bean . stringRepositoryList . size ( ) ) ;
assertSame ( repo , bean . repositoryList . get ( 0 ) ) ;
assertSame ( repo , bean . stringRepositoryList . get ( 0 ) ) ;
assertSame ( 1 , bean . repositoryMap . size ( ) ) ;
assertSame ( 1 , bean . stringRepositoryMap . size ( ) ) ;
assertSame ( repo , bean . repositoryMap . get ( "repo" ) ) ;
assertSame ( repo , bean . stringRepositoryMap . get ( "repo" ) ) ;
}
@Test
public void testGenericsBasedMethodInjection ( ) {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ( ) ;
@ -2163,6 +2231,34 @@ public class AutowiredAnnotationBeanPostProcessorTests {
@@ -2163,6 +2231,34 @@ public class AutowiredAnnotationBeanPostProcessorTests {
}
public static class RepositoryFieldInjectionBeanWithSimpleMatch {
@Autowired
public Repository < ? > repository ;
@Autowired
public Repository < String > stringRepository ;
@Autowired
public Repository [ ] repositoryArray ;
@Autowired
public Repository < String > [ ] stringRepositoryArray ;
@Autowired
public List < Repository > repositoryList ;
@Autowired
public List < Repository < String > > stringRepositoryList ;
@Autowired
public Map < String , Repository < ? > > repositoryMap ;
@Autowired
public Map < String , Repository < String > > stringRepositoryMap ;
}
public static class RepositoryMethodInjectionBean {
public Repository < String > stringRepository ;