ConfigurationPropertiesScanRegistrarTests Class — spring-boot Architecture
Architecture documentation for the ConfigurationPropertiesScanRegistrarTests class in ConfigurationPropertiesScanRegistrarTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrarTests.java lines 42–139
class ConfigurationPropertiesScanRegistrarTests {
private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
private final ConfigurationPropertiesScanRegistrar registrar = new ConfigurationPropertiesScanRegistrar(
new MockEnvironment(), null);
@Test
void registerBeanDefinitionsShouldScanForConfigurationProperties() throws IOException {
this.registrar.registerBeanDefinitions(getAnnotationMetadata(ConfigurationPropertiesScanConfiguration.class),
this.beanFactory);
BeanDefinition bingDefinition = this.beanFactory.getBeanDefinition(
"bing-org.springframework.boot.context.properties.scan.valid.ConfigurationPropertiesScanConfiguration$BingProperties");
BeanDefinition fooDefinition = this.beanFactory.getBeanDefinition(
"foo-org.springframework.boot.context.properties.scan.valid.ConfigurationPropertiesScanConfiguration$FooProperties");
BeanDefinition barDefinition = this.beanFactory.getBeanDefinition(
"bar-org.springframework.boot.context.properties.scan.valid.ConfigurationPropertiesScanConfiguration$BarProperties");
assertThat(bingDefinition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
assertThat(fooDefinition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
assertThat(barDefinition).satisfies(hasBindMethod(BindMethod.VALUE_OBJECT));
}
@Test
void scanWhenBeanDefinitionExistsShouldSkip() throws IOException {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowBeanDefinitionOverriding(false);
this.registrar.registerBeanDefinitions(
getAnnotationMetadata(ConfigurationPropertiesScanConfiguration.TestConfiguration.class), beanFactory);
assertThat(beanFactory.containsBeanDefinition(
"foo-org.springframework.boot.context.properties.scan.valid.ConfigurationPropertiesScanConfiguration$FooProperties"))
.isTrue();
assertThat(beanFactory.getBeanDefinitionNames())
.filteredOn((name) -> name.toLowerCase(Locale.ENGLISH).contains("fooproperties"))
.hasSize(1);
}
@Test
void scanWhenBasePackagesAndBasePackageClassesProvidedShouldUseThat() throws IOException {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowBeanDefinitionOverriding(false);
this.registrar.registerBeanDefinitions(
getAnnotationMetadata(ConfigurationPropertiesScanConfiguration.DifferentPackageConfiguration.class),
beanFactory);
assertThat(beanFactory.containsBeanDefinition(
"foo-org.springframework.boot.context.properties.scan.valid.ConfigurationPropertiesScanConfiguration$FooProperties"))
.isFalse();
BeanDefinition aDefinition = beanFactory.getBeanDefinition(
"a-org.springframework.boot.context.properties.scan.valid.a.AScanConfiguration$AProperties");
BeanDefinition bFirstDefinition = beanFactory.getBeanDefinition(
"b.first-org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration$BFirstProperties");
BeanDefinition bSecondDefinition = beanFactory.getBeanDefinition(
"b.second-org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration$BSecondProperties");
assertThat(aDefinition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
// Constructor injection
assertThat(bFirstDefinition).satisfies(hasBindMethod(BindMethod.VALUE_OBJECT));
// Post-processing injection
assertThat(bSecondDefinition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
}
@Test
void scanWhenComponentAnnotationPresentShouldSkipType() throws IOException {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowBeanDefinitionOverriding(false);
this.registrar.registerBeanDefinitions(getAnnotationMetadata(CombinedScanConfiguration.class), beanFactory);
assertThat(beanFactory.getBeanDefinitionCount()).isZero();
}
@Test
void scanWhenOtherComponentAnnotationPresentShouldSkipType() throws IOException {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowBeanDefinitionOverriding(false);
this.registrar.registerBeanDefinitions(getAnnotationMetadata(OtherCombinedScanConfiguration.class),
beanFactory);
assertThat(beanFactory.getBeanDefinitionCount()).isZero();
}
private Consumer<BeanDefinition> hasBindMethod(BindMethod bindMethod) {
return (definition) -> {
assertThat(definition.hasAttribute(BindMethod.class.getName())).isTrue();
assertThat(definition.getAttribute(BindMethod.class.getName())).isEqualTo(bindMethod);
};
}
private AnnotationMetadata getAnnotationMetadata(Class<?> source) throws IOException {
return new SimpleMetadataReaderFactory().getMetadataReader(source.getName()).getAnnotationMetadata();
}
@ConfigurationPropertiesScan(basePackageClasses = CombinedConfiguration.class)
static class CombinedScanConfiguration {
}
@ConfigurationPropertiesScan(basePackageClasses = OtherCombinedConfiguration.class)
static class OtherCombinedScanConfiguration {
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free