@ -332,18 +332,18 @@ public class AnnotationConfigApplicationContextTests {
@@ -332,18 +332,18 @@ public class AnnotationConfigApplicationContextTests {
@Test
public void individualBeanWithFactoryBeanSupplier ( ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
context . registerBean ( "fb" , Typ edFactoryBean. class , Typ edFactoryBean: : new , bd - > bd . setLazyInit ( true ) ) ;
context . registerBean ( "fb" , NonInstantiat edFactoryBean. class , NonInstantiat edFactoryBean: : new , bd - > bd . setLazyInit ( true ) ) ;
context . refresh ( ) ;
assertThat ( context . getType ( "fb" ) ) . isEqualTo ( String . class ) ;
assertThat ( context . getType ( "&fb" ) ) . isEqualTo ( Typ edFactoryBean. class ) ;
assertThat ( context . getType ( "&fb" ) ) . isEqualTo ( NonInstantiat edFactoryBean. class ) ;
}
@Test
public void individualBeanWithFactoryBeanSupplierAndTargetType ( ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
RootBeanDefinition bd = new RootBeanDefinition ( ) ;
bd . setInstanceSupplier ( Typ edFactoryBean: : new ) ;
bd . setInstanceSupplier ( NonInstantiat edFactoryBean: : new ) ;
bd . setTargetType ( ResolvableType . forClassWithGenerics ( FactoryBean . class , String . class ) ) ;
bd . setLazyInit ( true ) ;
context . registerBeanDefinition ( "fb" , bd ) ;
@ -351,6 +351,42 @@ public class AnnotationConfigApplicationContextTests {
@@ -351,6 +351,42 @@ public class AnnotationConfigApplicationContextTests {
assertThat ( context . getType ( "fb" ) ) . isEqualTo ( String . class ) ;
assertThat ( context . getType ( "&fb" ) ) . isEqualTo ( FactoryBean . class ) ;
assertThat ( context . getBeanNamesForType ( FactoryBean . class ) . length ) . isEqualTo ( 1 ) ;
assertThat ( context . getBeanNamesForType ( NonInstantiatedFactoryBean . class ) . length ) . isEqualTo ( 0 ) ;
}
@Test
public void individualBeanWithFactoryBeanObjectTypeAsTargetType ( ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
RootBeanDefinition bd = new RootBeanDefinition ( ) ;
bd . setBeanClass ( TypedFactoryBean . class ) ;
bd . setTargetType ( String . class ) ;
context . registerBeanDefinition ( "fb" , bd ) ;
context . refresh ( ) ;
assertThat ( context . getType ( "&fb" ) ) . isEqualTo ( TypedFactoryBean . class ) ;
assertThat ( context . getType ( "fb" ) ) . isEqualTo ( String . class ) ;
assertThat ( context . getBeanNamesForType ( FactoryBean . class ) . length ) . isEqualTo ( 1 ) ;
assertThat ( context . getBeanNamesForType ( TypedFactoryBean . class ) . length ) . isEqualTo ( 1 ) ;
}
@Test
public void individualBeanWithFactoryBeanObjectTypeAsTargetTypeAndLazy ( ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
RootBeanDefinition bd = new RootBeanDefinition ( ) ;
bd . setBeanClass ( TypedFactoryBean . class ) ;
bd . setTargetType ( String . class ) ;
bd . setLazyInit ( true ) ;
context . registerBeanDefinition ( "fb" , bd ) ;
context . refresh ( ) ;
assertThat ( context . getType ( "&fb" ) ) . isNull ( ) ;
assertThat ( context . getType ( "fb" ) ) . isEqualTo ( String . class ) ;
assertThat ( context . getBean ( "&fb" ) instanceof FactoryBean ) ;
assertThat ( context . getType ( "&fb" ) ) . isEqualTo ( TypedFactoryBean . class ) ;
assertThat ( context . getType ( "fb" ) ) . isEqualTo ( String . class ) ;
assertThat ( context . getBeanNamesForType ( FactoryBean . class ) . length ) . isEqualTo ( 1 ) ;
assertThat ( context . getBeanNamesForType ( TypedFactoryBean . class ) . length ) . isEqualTo ( 1 ) ;
}
@ -426,9 +462,9 @@ public class AnnotationConfigApplicationContextTests {
@@ -426,9 +462,9 @@ public class AnnotationConfigApplicationContextTests {
static class BeanC { }
static class Typ edFactoryBean implements FactoryBean < String > {
static class NonInstantiat edFactoryBean implements FactoryBean < String > {
public Typ edFactoryBean( ) {
public NonInstantiat edFactoryBean( ) {
throw new IllegalStateException ( ) ;
}
@ -448,6 +484,24 @@ public class AnnotationConfigApplicationContextTests {
@@ -448,6 +484,24 @@ public class AnnotationConfigApplicationContextTests {
}
}
static class TypedFactoryBean implements FactoryBean < String > {
@Override
public String getObject ( ) {
return "" ;
}
@Override
public Class < ? > getObjectType ( ) {
return String . class ;
}
@Override
public boolean isSingleton ( ) {
return true ;
}
}
static class UntypedFactoryBean implements FactoryBean < Object > {
@Override