@@ -1980,6 +1980,16 @@ void getBeanNamesForTypeWithPrototypeScopedFactoryBean() {
1980
1980
assertBeanNamesForType (FactoryBean .class , false , false );
1981
1981
}
1982
1982
1983
+ @ Test // gh-30987
1984
+ void getBeanNamesForTypeWithFactoryBeanDefinedAsTargetType () {
1985
+ RootBeanDefinition beanDefinition = new RootBeanDefinition (TestRepositoryFactoryBean .class );
1986
+ beanDefinition .setTargetType (ResolvableType .forClassWithGenerics (TestRepositoryFactoryBean .class ,
1987
+ CityRepository .class , Object .class , Object .class ));
1988
+ lbf .registerBeanDefinition ("factoryBean" , beanDefinition );
1989
+ assertBeanNamesForType (TestRepositoryFactoryBean .class , true , false , "&factoryBean" );
1990
+ assertBeanNamesForType (CityRepository .class , true , false , "factoryBean" );
1991
+ }
1992
+
1983
1993
/**
1984
1994
* Verifies that a dependency on a {@link FactoryBean} can <strong>not</strong>
1985
1995
* be autowired <em>by name</em>, as & is an illegal character in
@@ -3068,6 +3078,25 @@ public T call() {
3068
3078
}
3069
3079
3070
3080
3081
+ public static class TestRepositoryFactoryBean <T extends Repository <S , ID >, S , ID extends Serializable >
3082
+ extends RepositoryFactoryBeanSupport <T , S , ID > {
3083
+
3084
+ @ Override
3085
+ public T getObject () throws Exception {
3086
+ throw new IllegalArgumentException ("Should not be called" );
3087
+ }
3088
+
3089
+ @ Override
3090
+ public Class <?> getObjectType () {
3091
+ throw new IllegalArgumentException ("Should not be called" );
3092
+ }
3093
+ }
3094
+
3095
+ public record City (String name ) {}
3096
+
3097
+ public static class CityRepository implements Repository <City , Long > {}
3098
+
3099
+
3071
3100
public static class LazyInitFactory implements FactoryBean <Object > {
3072
3101
3073
3102
public boolean initialized = false ;
0 commit comments