@@ -1305,6 +1305,130 @@ public void testGenericsBasedConstructorInjection() {
13051305 assertSame (ir , bean .integerRepositoryMap .get ("integerRepo" ));
13061306 }
13071307
1308+ @ Test
1309+ public void testGenericsBasedConstructorInjectionWithNonTypedTarget () {
1310+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1311+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1312+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1313+ bpp .setBeanFactory (bf );
1314+ bf .addBeanPostProcessor (bpp );
1315+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryConstructorInjectionBean .class );
1316+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1317+ bf .registerBeanDefinition ("annotatedBean" , bd );
1318+ GenericRepository gr = new GenericRepository ();
1319+ bf .registerSingleton ("genericRepo" , gr );
1320+
1321+ RepositoryConstructorInjectionBean bean = (RepositoryConstructorInjectionBean ) bf .getBean ("annotatedBean" );
1322+ assertSame (gr , bean .stringRepository );
1323+ assertSame (gr , bean .integerRepository );
1324+ assertSame (1 , bean .stringRepositoryArray .length );
1325+ assertSame (1 , bean .integerRepositoryArray .length );
1326+ assertSame (gr , bean .stringRepositoryArray [0 ]);
1327+ assertSame (gr , bean .integerRepositoryArray [0 ]);
1328+ assertSame (1 , bean .stringRepositoryList .size ());
1329+ assertSame (1 , bean .integerRepositoryList .size ());
1330+ assertSame (gr , bean .stringRepositoryList .get (0 ));
1331+ assertSame (gr , bean .integerRepositoryList .get (0 ));
1332+ assertSame (1 , bean .stringRepositoryMap .size ());
1333+ assertSame (1 , bean .integerRepositoryMap .size ());
1334+ assertSame (gr , bean .stringRepositoryMap .get ("genericRepo" ));
1335+ assertSame (gr , bean .integerRepositoryMap .get ("genericRepo" ));
1336+ }
1337+
1338+ @ Test
1339+ public void testGenericsBasedConstructorInjectionWithNonGenericTarget () {
1340+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1341+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1342+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1343+ bpp .setBeanFactory (bf );
1344+ bf .addBeanPostProcessor (bpp );
1345+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryConstructorInjectionBean .class );
1346+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1347+ bf .registerBeanDefinition ("annotatedBean" , bd );
1348+ SimpleRepository ngr = new SimpleRepository ();
1349+ bf .registerSingleton ("simpleRepo" , ngr );
1350+
1351+ RepositoryConstructorInjectionBean bean = (RepositoryConstructorInjectionBean ) bf .getBean ("annotatedBean" );
1352+ assertSame (ngr , bean .stringRepository );
1353+ assertSame (ngr , bean .integerRepository );
1354+ assertSame (1 , bean .stringRepositoryArray .length );
1355+ assertSame (1 , bean .integerRepositoryArray .length );
1356+ assertSame (ngr , bean .stringRepositoryArray [0 ]);
1357+ assertSame (ngr , bean .integerRepositoryArray [0 ]);
1358+ assertSame (1 , bean .stringRepositoryList .size ());
1359+ assertSame (1 , bean .integerRepositoryList .size ());
1360+ assertSame (ngr , bean .stringRepositoryList .get (0 ));
1361+ assertSame (ngr , bean .integerRepositoryList .get (0 ));
1362+ assertSame (1 , bean .stringRepositoryMap .size ());
1363+ assertSame (1 , bean .integerRepositoryMap .size ());
1364+ assertSame (ngr , bean .stringRepositoryMap .get ("simpleRepo" ));
1365+ assertSame (ngr , bean .integerRepositoryMap .get ("simpleRepo" ));
1366+ }
1367+
1368+ @ Test
1369+ public void testGenericsBasedConstructorInjectionWithMixedTargets () {
1370+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1371+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1372+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1373+ bpp .setBeanFactory (bf );
1374+ bf .addBeanPostProcessor (bpp );
1375+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryConstructorInjectionBean .class );
1376+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1377+ bf .registerBeanDefinition ("annotatedBean" , bd );
1378+ StringRepository sr = new StringRepository ();
1379+ bf .registerSingleton ("stringRepo" , sr );
1380+ GenericRepository gr = new GenericRepositorySubclass ();
1381+ bf .registerSingleton ("genericRepo" , gr );
1382+
1383+ RepositoryConstructorInjectionBean bean = (RepositoryConstructorInjectionBean ) bf .getBean ("annotatedBean" );
1384+ assertSame (sr , bean .stringRepository );
1385+ assertSame (gr , bean .integerRepository );
1386+ assertSame (1 , bean .stringRepositoryArray .length );
1387+ assertSame (1 , bean .integerRepositoryArray .length );
1388+ assertSame (sr , bean .stringRepositoryArray [0 ]);
1389+ assertSame (gr , bean .integerRepositoryArray [0 ]);
1390+ assertSame (1 , bean .stringRepositoryList .size ());
1391+ assertSame (1 , bean .integerRepositoryList .size ());
1392+ assertSame (sr , bean .stringRepositoryList .get (0 ));
1393+ assertSame (gr , bean .integerRepositoryList .get (0 ));
1394+ assertSame (1 , bean .stringRepositoryMap .size ());
1395+ assertSame (1 , bean .integerRepositoryMap .size ());
1396+ assertSame (sr , bean .stringRepositoryMap .get ("stringRepo" ));
1397+ assertSame (gr , bean .integerRepositoryMap .get ("genericRepo" ));
1398+ }
1399+
1400+ @ Test
1401+ public void testGenericsBasedConstructorInjectionWithMixedTargetsIncludingNonGeneric () {
1402+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1403+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1404+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1405+ bpp .setBeanFactory (bf );
1406+ bf .addBeanPostProcessor (bpp );
1407+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryConstructorInjectionBean .class );
1408+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1409+ bf .registerBeanDefinition ("annotatedBean" , bd );
1410+ StringRepository sr = new StringRepository ();
1411+ bf .registerSingleton ("stringRepo" , sr );
1412+ SimpleRepository ngr = new SimpleRepositorySubclass ();
1413+ bf .registerSingleton ("simpleRepo" , ngr );
1414+
1415+ RepositoryConstructorInjectionBean bean = (RepositoryConstructorInjectionBean ) bf .getBean ("annotatedBean" );
1416+ assertSame (sr , bean .stringRepository );
1417+ assertSame (ngr , bean .integerRepository );
1418+ assertSame (1 , bean .stringRepositoryArray .length );
1419+ assertSame (1 , bean .integerRepositoryArray .length );
1420+ assertSame (sr , bean .stringRepositoryArray [0 ]);
1421+ assertSame (ngr , bean .integerRepositoryArray [0 ]);
1422+ assertSame (1 , bean .stringRepositoryList .size ());
1423+ assertSame (1 , bean .integerRepositoryList .size ());
1424+ assertSame (sr , bean .stringRepositoryList .get (0 ));
1425+ assertSame (ngr , bean .integerRepositoryList .get (0 ));
1426+ assertSame (1 , bean .stringRepositoryMap .size ());
1427+ assertSame (1 , bean .integerRepositoryMap .size ());
1428+ assertSame (sr , bean .stringRepositoryMap .get ("stringRepo" ));
1429+ assertSame (ngr , bean .integerRepositoryMap .get ("simpleRepo" ));
1430+ }
1431+
13081432
13091433 public static class ResourceInjectionBean {
13101434
@@ -1859,6 +1983,18 @@ public static class StringRepository implements Repository<String> {
18591983 public static class IntegerRepository implements Repository <Integer > {
18601984 }
18611985
1986+ public static class GenericRepository <T > implements Repository <T > {
1987+ }
1988+
1989+ public static class GenericRepositorySubclass extends GenericRepository {
1990+ }
1991+
1992+ public static class SimpleRepository implements Repository {
1993+ }
1994+
1995+ public static class SimpleRepositorySubclass extends SimpleRepository {
1996+ }
1997+
18621998
18631999 public static class RepositoryFieldInjectionBean {
18642000
0 commit comments