@ -1980,6 +1980,16 @@ class DefaultListableBeanFactoryTests {
@@ -1980,6 +1980,16 @@ class DefaultListableBeanFactoryTests {
assertBeanNamesForType ( FactoryBean . class , false , false ) ;
}
@Test // gh-30987
void getBeanNamesForTypeWithFactoryBeanDefinedAsTargetType ( ) {
RootBeanDefinition beanDefinition = new RootBeanDefinition ( TestRepositoryFactoryBean . class ) ;
beanDefinition . setTargetType ( ResolvableType . forClassWithGenerics ( TestRepositoryFactoryBean . class ,
CityRepository . class , Object . class , Object . class ) ) ;
lbf . registerBeanDefinition ( "factoryBean" , beanDefinition ) ;
assertBeanNamesForType ( TestRepositoryFactoryBean . class , true , false , "&factoryBean" ) ;
assertBeanNamesForType ( CityRepository . class , true , false , "factoryBean" ) ;
}
/ * *
* Verifies that a dependency on a { @link FactoryBean } can < strong > not < / strong >
* be autowired < em > by name < / em > , as & amp ; is an illegal character in
@ -3068,6 +3078,25 @@ class DefaultListableBeanFactoryTests {
@@ -3068,6 +3078,25 @@ class DefaultListableBeanFactoryTests {
}
public static class TestRepositoryFactoryBean < T extends Repository < S , ID > , S , ID extends Serializable >
extends RepositoryFactoryBeanSupport < T , S , ID > {
@Override
public T getObject ( ) throws Exception {
throw new IllegalArgumentException ( "Should not be called" ) ;
}
@Override
public Class < ? > getObjectType ( ) {
throw new IllegalArgumentException ( "Should not be called" ) ;
}
}
public record City ( String name ) { }
public static class CityRepository implements Repository < City , Long > { }
public static class LazyInitFactory implements FactoryBean < Object > {
public boolean initialized = false ;