28
28
import org .mockito .junit .jupiter .MockitoExtension ;
29
29
import org .mockito .junit .jupiter .MockitoSettings ;
30
30
import org .mockito .quality .Strictness ;
31
+
31
32
import org .springframework .aop .framework .Advised ;
32
33
import org .springframework .aot .hint .RuntimeHints ;
33
34
import org .springframework .beans .factory .ListableBeanFactory ;
@@ -266,6 +267,16 @@ void registersGenericsForAdditionalGenericsRepositoryFactoryBean() {
266
267
assertThat (it .getGeneric (3 ).getType ()).isInstanceOf (TypeVariable .class );
267
268
}
268
269
270
+ @ Test // GH-3074
271
+ void considersGenericLength () {
272
+
273
+ ResolvableType it = registerBeanDefinition (IdAndEntityConstrainingFactoryBean .class );
274
+
275
+ assertThat (it .getGenerics ()).hasSize (2 );
276
+ assertThat (it .getGeneric (0 ).resolve ()).isEqualTo (MyAnnotatedRepository .class );
277
+ assertThat (it .getGeneric (1 ).resolve ()).isEqualTo (Person .class );
278
+ }
279
+
269
280
private static ListableBeanFactory assertLazyRepositoryBeanSetup (Class <?> configClass ) {
270
281
271
282
var context = new AnnotationConfigApplicationContext (configClass );
@@ -329,8 +340,8 @@ private ResolvableType registerBeanDefinition(Class<?> repositoryFactoryType) {
329
340
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ();
330
341
331
342
RepositoryConfigurationSource source = new AnnotationRepositoryConfigurationSource (metadata ,
332
- EnableRepositories .class , context , context .getEnvironment (),
333
- context . getDefaultListableBeanFactory (), new AnnotationBeanNameGenerator ()) {
343
+ EnableRepositories .class , context , context .getEnvironment (), context . getDefaultListableBeanFactory (),
344
+ new AnnotationBeanNameGenerator ()) {
334
345
335
346
@ Override
336
347
public Optional <String > getRepositoryFactoryBeanClassName () {
@@ -343,10 +354,8 @@ public Optional<String> getRepositoryFactoryBeanClassName() {
343
354
344
355
List <BeanComponentDefinition > repositories = delegate .registerRepositoriesIn (context , extension );
345
356
346
- assertThat (repositories ).hasSize (1 ).element (0 )
347
- .extracting (BeanComponentDefinition ::getBeanDefinition )
348
- .extracting (BeanDefinition ::getResolvableType )
349
- .isNotNull ();
357
+ assertThat (repositories ).hasSize (1 ).element (0 ).extracting (BeanComponentDefinition ::getBeanDefinition )
358
+ .extracting (BeanDefinition ::getResolvableType ).isNotNull ();
350
359
351
360
return repositories .get (0 ).getBeanDefinition ().getResolvableType ();
352
361
}
@@ -374,4 +383,21 @@ protected AdditionalGenericsRepositoryFactoryBean(Class<? extends T> repositoryI
374
383
super (repositoryInterface );
375
384
}
376
385
}
386
+
387
+ static abstract class ModuleRepositoryFactoryBean <T extends Repository <S , ID >, S , ID >
388
+ extends RepositoryFactoryBeanSupport <T , S , ID > {
389
+
390
+ protected ModuleRepositoryFactoryBean (Class <? extends T > repositoryInterface ) {
391
+ super (repositoryInterface );
392
+ }
393
+ }
394
+
395
+ static abstract class IdAndEntityConstrainingFactoryBean <R extends Repository <T , String >, T extends Person >
396
+ extends RepositoryFactoryBeanSupport <R , T , String > {
397
+ protected IdAndEntityConstrainingFactoryBean (Class <R > repositoryInterface ) {
398
+ super (repositoryInterface );
399
+ }
400
+
401
+ }
402
+
377
403
}
0 commit comments