Polish GenericApplicationContextTests
This commit is contained in:
parent
0c9def89de
commit
a970516080
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package org.springframework.context.support;
|
package org.springframework.context.support;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
||||||
|
@ -24,7 +25,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.core.metrics.jfr.FlightRecorderApplicationStartup;
|
import org.springframework.core.metrics.jfr.FlightRecorderApplicationStartup;
|
||||||
import org.springframework.util.ObjectUtils;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
|
@ -36,72 +36,70 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||||
*/
|
*/
|
||||||
class GenericApplicationContextTests {
|
class GenericApplicationContextTests {
|
||||||
|
|
||||||
|
private final GenericApplicationContext context = new GenericApplicationContext();
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
void closeContext() {
|
||||||
|
context.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getBeanForClass() {
|
void getBeanForClass() {
|
||||||
GenericApplicationContext ac = new GenericApplicationContext();
|
context.registerBeanDefinition("testBean", new RootBeanDefinition(String.class));
|
||||||
ac.registerBeanDefinition("testBean", new RootBeanDefinition(String.class));
|
context.refresh();
|
||||||
ac.refresh();
|
|
||||||
|
|
||||||
assertThat(ac.getBean("testBean")).isEqualTo("");
|
assertThat(context.getBean("testBean")).isEqualTo("");
|
||||||
assertThat(ac.getBean(String.class)).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean(String.class)).isSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean(CharSequence.class)).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean(CharSequence.class)).isSameAs(context.getBean("testBean"));
|
||||||
|
|
||||||
assertThatExceptionOfType(NoUniqueBeanDefinitionException.class).isThrownBy(() ->
|
assertThatExceptionOfType(NoUniqueBeanDefinitionException.class)
|
||||||
ac.getBean(Object.class));
|
.isThrownBy(() -> context.getBean(Object.class));
|
||||||
ac.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void withSingletonSupplier() {
|
void withSingletonSupplier() {
|
||||||
GenericApplicationContext ac = new GenericApplicationContext();
|
context.registerBeanDefinition("testBean", new RootBeanDefinition(String.class, context::toString));
|
||||||
ac.registerBeanDefinition("testBean", new RootBeanDefinition(String.class, ac::toString));
|
context.refresh();
|
||||||
ac.refresh();
|
|
||||||
|
|
||||||
assertThat(ac.getBean("testBean")).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean("testBean")).isSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean(String.class)).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean(String.class)).isSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean(CharSequence.class)).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean(CharSequence.class)).isSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean("testBean")).isEqualTo(ac.toString());
|
assertThat(context.getBean("testBean")).isEqualTo(context.toString());
|
||||||
ac.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void withScopedSupplier() {
|
void withScopedSupplier() {
|
||||||
GenericApplicationContext ac = new GenericApplicationContext();
|
context.registerBeanDefinition("testBean",
|
||||||
ac.registerBeanDefinition("testBean",
|
new RootBeanDefinition(String.class, BeanDefinition.SCOPE_PROTOTYPE, context::toString));
|
||||||
new RootBeanDefinition(String.class, BeanDefinition.SCOPE_PROTOTYPE, ac::toString));
|
context.refresh();
|
||||||
ac.refresh();
|
|
||||||
|
|
||||||
assertThat(ac.getBean("testBean")).isNotSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean("testBean")).isNotSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean(String.class)).isEqualTo(ac.getBean("testBean"));
|
assertThat(context.getBean(String.class)).isEqualTo(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean(CharSequence.class)).isEqualTo(ac.getBean("testBean"));
|
assertThat(context.getBean(CharSequence.class)).isEqualTo(context.getBean("testBean"));
|
||||||
assertThat(ac.getBean("testBean")).isEqualTo(ac.toString());
|
assertThat(context.getBean("testBean")).isEqualTo(context.toString());
|
||||||
ac.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void accessAfterClosing() {
|
void accessAfterClosing() {
|
||||||
GenericApplicationContext ac = new GenericApplicationContext();
|
context.registerBeanDefinition("testBean", new RootBeanDefinition(String.class));
|
||||||
ac.registerBeanDefinition("testBean", new RootBeanDefinition(String.class));
|
context.refresh();
|
||||||
ac.refresh();
|
|
||||||
|
|
||||||
assertThat(ac.getBean(String.class)).isSameAs(ac.getBean("testBean"));
|
assertThat(context.getBean(String.class)).isSameAs(context.getBean("testBean"));
|
||||||
assertThat(ac.getAutowireCapableBeanFactory().getBean(String.class)).isSameAs(ac.getAutowireCapableBeanFactory().getBean("testBean"));
|
assertThat(context.getAutowireCapableBeanFactory().getBean(String.class))
|
||||||
|
.isSameAs(context.getAutowireCapableBeanFactory().getBean("testBean"));
|
||||||
|
|
||||||
ac.close();
|
context.close();
|
||||||
|
|
||||||
assertThatIllegalStateException().isThrownBy(() ->
|
assertThatIllegalStateException()
|
||||||
ac.getBean(String.class));
|
.isThrownBy(() -> context.getBean(String.class));
|
||||||
|
assertThatIllegalStateException()
|
||||||
assertThatIllegalStateException().isThrownBy(() -> {
|
.isThrownBy(() -> context.getAutowireCapableBeanFactory().getBean(String.class));
|
||||||
ac.getAutowireCapableBeanFactory().getBean("testBean");
|
assertThatIllegalStateException()
|
||||||
ac.getAutowireCapableBeanFactory().getBean(String.class);
|
.isThrownBy(() -> context.getAutowireCapableBeanFactory().getBean("testBean"));
|
||||||
});
|
|
||||||
ac.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualBeans() {
|
void individualBeans() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean(BeanA.class);
|
context.registerBean(BeanA.class);
|
||||||
context.registerBean(BeanB.class);
|
context.registerBean(BeanB.class);
|
||||||
context.registerBean(BeanC.class);
|
context.registerBean(BeanC.class);
|
||||||
|
@ -110,12 +108,10 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean(BeanB.class));
|
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean(BeanB.class));
|
||||||
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
||||||
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualNamedBeans() {
|
void individualNamedBeans() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean("a", BeanA.class);
|
context.registerBean("a", BeanA.class);
|
||||||
context.registerBean("b", BeanB.class);
|
context.registerBean("b", BeanB.class);
|
||||||
context.registerBean("c", BeanC.class);
|
context.registerBean("c", BeanC.class);
|
||||||
|
@ -124,12 +120,10 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean("a", BeanA.class).b).isSameAs(context.getBean("b"));
|
assertThat(context.getBean("a", BeanA.class).b).isSameAs(context.getBean("b"));
|
||||||
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
||||||
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualBeanWithSupplier() {
|
void individualBeanWithSupplier() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean(BeanA.class,
|
context.registerBean(BeanA.class,
|
||||||
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)));
|
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)));
|
||||||
context.registerBean(BeanB.class, BeanB::new);
|
context.registerBean(BeanB.class, BeanB::new);
|
||||||
|
@ -141,14 +135,14 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
||||||
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
||||||
|
|
||||||
assertThat(context.getDefaultListableBeanFactory().getDependentBeans(BeanB.class.getName())).isEqualTo(new String[] {BeanA.class.getName()});
|
assertThat(context.getDefaultListableBeanFactory().getDependentBeans(BeanB.class.getName()))
|
||||||
assertThat(context.getDefaultListableBeanFactory().getDependentBeans(BeanC.class.getName())).isEqualTo(new String[] {BeanA.class.getName()});
|
.containsExactly(BeanA.class.getName());
|
||||||
context.close();
|
assertThat(context.getDefaultListableBeanFactory().getDependentBeans(BeanC.class.getName()))
|
||||||
|
.containsExactly(BeanA.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualBeanWithSupplierAndCustomizer() {
|
void individualBeanWithSupplierAndCustomizer() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean(BeanA.class,
|
context.registerBean(BeanA.class,
|
||||||
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)),
|
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)),
|
||||||
bd -> bd.setLazyInit(true));
|
bd -> bd.setLazyInit(true));
|
||||||
|
@ -160,12 +154,10 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean(BeanB.class));
|
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean(BeanB.class));
|
||||||
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
assertThat(context.getBean(BeanA.class).c).isSameAs(context.getBean(BeanC.class));
|
||||||
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean(BeanB.class).applicationContext).isSameAs(context);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualNamedBeanWithSupplier() {
|
void individualNamedBeanWithSupplier() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean("a", BeanA.class,
|
context.registerBean("a", BeanA.class,
|
||||||
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)));
|
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)));
|
||||||
context.registerBean("b", BeanB.class, BeanB::new);
|
context.registerBean("b", BeanB.class, BeanB::new);
|
||||||
|
@ -176,12 +168,10 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean("b", BeanB.class));
|
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean("b", BeanB.class));
|
||||||
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
||||||
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualNamedBeanWithSupplierAndCustomizer() {
|
void individualNamedBeanWithSupplierAndCustomizer() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean("a", BeanA.class,
|
context.registerBean("a", BeanA.class,
|
||||||
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)),
|
() -> new BeanA(context.getBean(BeanB.class), context.getBean(BeanC.class)),
|
||||||
bd -> bd.setLazyInit(true));
|
bd -> bd.setLazyInit(true));
|
||||||
|
@ -193,33 +183,30 @@ class GenericApplicationContextTests {
|
||||||
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean("b", BeanB.class));
|
assertThat(context.getBean(BeanA.class).b).isSameAs(context.getBean("b", BeanB.class));
|
||||||
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
assertThat(context.getBean("a", BeanA.class).c).isSameAs(context.getBean("c"));
|
||||||
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
assertThat(context.getBean("b", BeanB.class).applicationContext).isSameAs(context);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void individualBeanWithNullReturningSupplier() {
|
void individualBeanWithNullReturningSupplier() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.registerBean("a", BeanA.class, () -> null);
|
context.registerBean("a", BeanA.class, () -> null);
|
||||||
context.registerBean("b", BeanB.class, BeanB::new);
|
context.registerBean("b", BeanB.class, BeanB::new);
|
||||||
context.registerBean("c", BeanC.class, BeanC::new);
|
context.registerBean("c", BeanC.class, BeanC::new);
|
||||||
context.refresh();
|
context.refresh();
|
||||||
|
|
||||||
assertThat(ObjectUtils.containsElement(context.getBeanNamesForType(BeanA.class), "a")).isTrue();
|
assertThat(context.getBeanNamesForType(BeanA.class)).containsExactly("a");
|
||||||
assertThat(ObjectUtils.containsElement(context.getBeanNamesForType(BeanB.class), "b")).isTrue();
|
assertThat(context.getBeanNamesForType(BeanB.class)).containsExactly("b");
|
||||||
assertThat(ObjectUtils.containsElement(context.getBeanNamesForType(BeanC.class), "c")).isTrue();
|
assertThat(context.getBeanNamesForType(BeanC.class)).containsExactly("c");
|
||||||
assertThat(context.getBeansOfType(BeanA.class).isEmpty()).isTrue();
|
assertThat(context.getBeansOfType(BeanA.class)).isEmpty();
|
||||||
assertThat(context.getBeansOfType(BeanB.class).values().iterator().next()).isSameAs(context.getBean(BeanB.class));
|
assertThat(context.getBeansOfType(BeanB.class).values().iterator().next())
|
||||||
assertThat(context.getBeansOfType(BeanC.class).values().iterator().next()).isSameAs(context.getBean(BeanC.class));
|
.isSameAs(context.getBean(BeanB.class));
|
||||||
context.close();
|
assertThat(context.getBeansOfType(BeanC.class).values().iterator().next())
|
||||||
|
.isSameAs(context.getBean(BeanC.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void configureApplicationStartupOnBeanFactory() {
|
void configureApplicationStartupOnBeanFactory() {
|
||||||
FlightRecorderApplicationStartup applicationStartup = new FlightRecorderApplicationStartup();
|
FlightRecorderApplicationStartup applicationStartup = new FlightRecorderApplicationStartup();
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
|
||||||
context.setApplicationStartup(applicationStartup);
|
context.setApplicationStartup(applicationStartup);
|
||||||
assertThat(context.getBeanFactory().getApplicationStartup()).isEqualTo(applicationStartup);
|
assertThat(context.getBeanFactory().getApplicationStartup()).isEqualTo(applicationStartup);
|
||||||
context.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue