Merge branch '5.2.x'
This commit is contained in:
@@ -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
|
||||
* @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 {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user