AbstractDependsOnBeanFactoryPostProcessorTests Class — spring-boot Architecture
Architecture documentation for the AbstractDependsOnBeanFactoryPostProcessorTests class in AbstractDependsOnBeanFactoryPostProcessorTests.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AbstractDependsOnBeanFactoryPostProcessorTests.java lines 39–185
class AbstractDependsOnBeanFactoryPostProcessorTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withUserConfiguration(FooBarConfiguration.class);
@Test
void fooBeansShouldDependOnBarBeanNames() {
this.contextRunner
.withUserConfiguration(FooDependsOnBarNamePostProcessor.class, FooBarFactoryBeanConfiguration.class)
.run(this::assertThatFooDependsOnBar);
}
@Test
void fooBeansShouldDependOnBarBeanTypes() {
this.contextRunner
.withUserConfiguration(FooDependsOnBarTypePostProcessor.class, FooBarFactoryBeanConfiguration.class)
.run(this::assertThatFooDependsOnBar);
}
@Test
void fooBeansShouldDependOnBarBeanNamesParentContext() {
try (AnnotationConfigApplicationContext parentContext = new AnnotationConfigApplicationContext(
FooBarFactoryBeanConfiguration.class)) {
this.contextRunner.withUserConfiguration(FooDependsOnBarNamePostProcessor.class)
.withParent(parentContext)
.run(this::assertThatFooDependsOnBar);
}
}
@Test
void fooBeansShouldDependOnBarBeanTypesParentContext() {
try (AnnotationConfigApplicationContext parentContext = new AnnotationConfigApplicationContext(
FooBarFactoryBeanConfiguration.class)) {
this.contextRunner.withUserConfiguration(FooDependsOnBarTypePostProcessor.class)
.withParent(parentContext)
.run(this::assertThatFooDependsOnBar);
}
}
@Test
void postProcessorHasADefaultOrderOfZero() {
assertThat(new FooDependsOnBarTypePostProcessor().getOrder()).isZero();
}
private void assertThatFooDependsOnBar(AssertableApplicationContext context) {
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
assertThat(getBeanDefinition("foo", beanFactory).getDependsOn()).containsExactly("bar", "barFactoryBean");
assertThat(getBeanDefinition("fooFactoryBean", beanFactory).getDependsOn()).containsExactly("bar",
"barFactoryBean");
}
private BeanDefinition getBeanDefinition(String beanName, ConfigurableListableBeanFactory beanFactory) {
try {
return beanFactory.getBeanDefinition(beanName);
}
catch (NoSuchBeanDefinitionException ex) {
BeanFactory parentBeanFactory = beanFactory.getParentBeanFactory();
if (parentBeanFactory instanceof ConfigurableListableBeanFactory configurableListableBeanFactory) {
return getBeanDefinition(beanName, configurableListableBeanFactory);
}
throw ex;
}
}
static class Foo {
}
static class Bar {
}
@Configuration(proxyBeanMethods = false)
static class FooBarFactoryBeanConfiguration {
@Bean
FooFactoryBean fooFactoryBean() {
return new FooFactoryBean();
}
@Bean
BarFactoryBean barFactoryBean() {
return new BarFactoryBean();
}
}
@Configuration(proxyBeanMethods = false)
static class FooBarConfiguration {
@Bean
Bar bar() {
return new Bar();
}
@Bean
Foo foo() {
return new Foo();
}
}
static class FooDependsOnBarTypePostProcessor extends AbstractDependsOnBeanFactoryPostProcessor {
protected FooDependsOnBarTypePostProcessor() {
super(Foo.class, FooFactoryBean.class, Bar.class, BarFactoryBean.class);
}
}
static class FooDependsOnBarNamePostProcessor extends AbstractDependsOnBeanFactoryPostProcessor {
protected FooDependsOnBarNamePostProcessor() {
super(Foo.class, FooFactoryBean.class, "bar", "barFactoryBean");
}
}
static class FooFactoryBean implements FactoryBean<Foo> {
@Override
public Foo getObject() {
return new Foo();
}
@Override
public Class<?> getObjectType() {
return Foo.class;
}
}
static class BarFactoryBean implements FactoryBean<Bar> {
@Override
public Bar getObject() {
return new Bar();
}
@Override
public Class<?> getObjectType() {
return Bar.class;
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free