@@ -1320,6 +1320,40 @@ public void testGenericsBasedFieldInjectionWithSimpleMatch() {
1320
1320
assertSame (repo , bean .stringRepositoryMap .get ("repo" ));
1321
1321
}
1322
1322
1323
+ @ Test
1324
+ public void testGenericsBasedFactoryBeanInjectionWithBeanDefinition () {
1325
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1326
+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1327
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1328
+ bpp .setBeanFactory (bf );
1329
+ bf .addBeanPostProcessor (bpp );
1330
+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryFactoryBeanInjectionBean .class );
1331
+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1332
+ bf .registerBeanDefinition ("annotatedBean" , bd );
1333
+ bf .registerBeanDefinition ("repoFactoryBean" , new RootBeanDefinition (RepositoryFactoryBean .class ));
1334
+
1335
+ RepositoryFactoryBeanInjectionBean bean = (RepositoryFactoryBeanInjectionBean ) bf .getBean ("annotatedBean" );
1336
+ RepositoryFactoryBean repoFactoryBean = bf .getBean ("&repoFactoryBean" , RepositoryFactoryBean .class );
1337
+ assertSame (repoFactoryBean , bean .repositoryFactoryBean );
1338
+ }
1339
+
1340
+ @ Test
1341
+ public void testGenericsBasedFactoryBeanInjectionWithSingletonBean () {
1342
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
1343
+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
1344
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
1345
+ bpp .setBeanFactory (bf );
1346
+ bf .addBeanPostProcessor (bpp );
1347
+ RootBeanDefinition bd = new RootBeanDefinition (RepositoryFactoryBeanInjectionBean .class );
1348
+ bd .setScope (RootBeanDefinition .SCOPE_PROTOTYPE );
1349
+ bf .registerBeanDefinition ("annotatedBean" , bd );
1350
+ bf .registerSingleton ("repoFactoryBean" , new RepositoryFactoryBean <>());
1351
+
1352
+ RepositoryFactoryBeanInjectionBean bean = (RepositoryFactoryBeanInjectionBean ) bf .getBean ("annotatedBean" );
1353
+ RepositoryFactoryBean repoFactoryBean = bf .getBean ("&repoFactoryBean" , RepositoryFactoryBean .class );
1354
+ assertSame (repoFactoryBean , bean .repositoryFactoryBean );
1355
+ }
1356
+
1323
1357
@ Test
1324
1358
public void testGenericsBasedFieldInjectionWithSimpleMatchAndMock () {
1325
1359
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
@@ -2180,6 +2214,25 @@ public static class SimpleRepositorySubclass extends SimpleRepository {
2180
2214
}
2181
2215
2182
2216
2217
+ public static class RepositoryFactoryBean <T > implements FactoryBean <T > {
2218
+
2219
+ @ Override
2220
+ public T getObject () {
2221
+ throw new IllegalStateException ();
2222
+ }
2223
+
2224
+ @ Override
2225
+ public Class <?> getObjectType () {
2226
+ return Object .class ;
2227
+ }
2228
+
2229
+ @ Override
2230
+ public boolean isSingleton () {
2231
+ return false ;
2232
+ }
2233
+ }
2234
+
2235
+
2183
2236
public static class RepositoryFieldInjectionBean {
2184
2237
2185
2238
@ Autowired
@@ -2297,6 +2350,13 @@ public static class RepositoryFieldInjectionBeanWithSimpleMatch {
2297
2350
}
2298
2351
2299
2352
2353
+ public static class RepositoryFactoryBeanInjectionBean {
2354
+
2355
+ @ Autowired
2356
+ public RepositoryFactoryBean <?> repositoryFactoryBean ;
2357
+ }
2358
+
2359
+
2300
2360
public static class RepositoryMethodInjectionBean {
2301
2361
2302
2362
public Repository <String > stringRepository ;
0 commit comments