@@ -1305,6 +1305,130 @@ public void testGenericsBasedConstructorInjection() {
1305
1305
assertSame (ir , bean .integerRepositoryMap .get ("integerRepo" ));
1306
1306
}
1307
1307
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
+
1308
1432
1309
1433
public static class ResourceInjectionBean {
1310
1434
@@ -1859,6 +1983,18 @@ public static class StringRepository implements Repository<String> {
1859
1983
public static class IntegerRepository implements Repository <Integer > {
1860
1984
}
1861
1985
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
+
1862
1998
1863
1999
public static class RepositoryFieldInjectionBean {
1864
2000
0 commit comments