@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2019 the original author or authors .
* Copyright 2002 - 2020 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -43,6 +43,7 @@ import static org.springframework.core.testfixture.io.ResourceTestUtils.qualifie
@@ -43,6 +43,7 @@ import static org.springframework.core.testfixture.io.ResourceTestUtils.qualifie
* @author Rod Johnson
* @author Juergen Hoeller
* @author Chris Beams
* @author Sam Brannen
* @since 04 . 07 . 2003
* /
public class BeanFactoryUtilsTests {
@ -323,4 +324,106 @@ public class BeanFactoryUtilsTests {
@@ -323,4 +324,106 @@ public class BeanFactoryUtilsTests {
assertThat ( Arrays . equals ( new String [ ] { "buffer" } , deps ) ) . isTrue ( ) ;
}
@Test
public void isSingletonAndIsPrototypeWithStaticFactory ( ) {
StaticListableBeanFactory lbf = new StaticListableBeanFactory ( ) ;
TestBean bean = new TestBean ( ) ;
DummyFactory fb1 = new DummyFactory ( ) ;
DummyFactory fb2 = new DummyFactory ( ) ;
fb2 . setSingleton ( false ) ;
TestBeanSmartFactoryBean sfb1 = new TestBeanSmartFactoryBean ( true , true ) ;
TestBeanSmartFactoryBean sfb2 = new TestBeanSmartFactoryBean ( true , false ) ;
TestBeanSmartFactoryBean sfb3 = new TestBeanSmartFactoryBean ( false , true ) ;
TestBeanSmartFactoryBean sfb4 = new TestBeanSmartFactoryBean ( false , false ) ;
lbf . addBean ( "bean" , bean ) ;
lbf . addBean ( "fb1" , fb1 ) ;
lbf . addBean ( "fb2" , fb2 ) ;
lbf . addBean ( "sfb1" , sfb1 ) ;
lbf . addBean ( "sfb2" , sfb2 ) ;
lbf . addBean ( "sfb3" , sfb3 ) ;
lbf . addBean ( "sfb4" , sfb4 ) ;
Map < String , ? > beans = BeanFactoryUtils . beansOfTypeIncludingAncestors ( lbf , ITestBean . class , true , true ) ;
assertThat ( beans . get ( "bean" ) ) . isSameAs ( bean ) ;
assertThat ( beans . get ( "fb1" ) ) . isSameAs ( fb1 . getObject ( ) ) ;
assertThat ( beans . get ( "fb2" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( beans . get ( "sfb1" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( beans . get ( "sfb2" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( beans . get ( "sfb3" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( beans . get ( "sfb4" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( lbf . getBeanDefinitionCount ( ) ) . isEqualTo ( 7 ) ;
assertThat ( lbf . getBean ( "bean" ) ) . isInstanceOf ( TestBean . class ) ;
assertThat ( lbf . getBean ( "&fb1" ) ) . isInstanceOf ( FactoryBean . class ) ;
assertThat ( lbf . getBean ( "&fb2" ) ) . isInstanceOf ( FactoryBean . class ) ;
assertThat ( lbf . getBean ( "&sfb1" ) ) . isInstanceOf ( SmartFactoryBean . class ) ;
assertThat ( lbf . getBean ( "&sfb2" ) ) . isInstanceOf ( SmartFactoryBean . class ) ;
assertThat ( lbf . getBean ( "&sfb3" ) ) . isInstanceOf ( SmartFactoryBean . class ) ;
assertThat ( lbf . getBean ( "&sfb4" ) ) . isInstanceOf ( SmartFactoryBean . class ) ;
assertThat ( lbf . isSingleton ( "bean" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "fb1" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "fb2" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "sfb1" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "sfb2" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "sfb3" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "sfb4" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "&fb1" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "&fb2" ) ) . isFalse ( ) ;
assertThat ( lbf . isSingleton ( "&sfb1" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "&sfb2" ) ) . isTrue ( ) ;
assertThat ( lbf . isSingleton ( "&sfb3" ) ) . isFalse ( ) ;
assertThat ( lbf . isSingleton ( "&sfb4" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "bean" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "fb1" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "fb2" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "sfb1" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "sfb2" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "sfb3" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "sfb4" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "&fb1" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "&fb2" ) ) . isTrue ( ) ;
assertThat ( lbf . isPrototype ( "&sfb1" ) ) . isTrue ( ) ;
assertThat ( lbf . isPrototype ( "&sfb2" ) ) . isFalse ( ) ;
assertThat ( lbf . isPrototype ( "&sfb3" ) ) . isTrue ( ) ;
assertThat ( lbf . isPrototype ( "&sfb4" ) ) . isTrue ( ) ;
}
static class TestBeanSmartFactoryBean implements SmartFactoryBean < TestBean > {
private final TestBean testBean = new TestBean ( "enigma" , 42 ) ;
private final boolean singleton ;
private final boolean prototype ;
TestBeanSmartFactoryBean ( boolean singleton , boolean prototype ) {
this . singleton = singleton ;
this . prototype = prototype ;
}
@Override
public boolean isSingleton ( ) {
return this . singleton ;
}
@Override
public boolean isPrototype ( ) {
return this . prototype ;
}
@Override
public Class < TestBean > getObjectType ( ) {
return TestBean . class ;
}
public TestBean getObject ( ) throws Exception {
// We don't really care if the actual instance is a singleton or prototype
// for the tests that use this factory.
return this . testBean ;
}
}
}