Skip to content

Commit 89aefa6

Browse files
committed
Enable binding for scanned configuration properties
Closes gh-16822
1 parent 2784fc1 commit 89aefa6

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesScan.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
@Target(ElementType.TYPE)
3838
@Retention(RetentionPolicy.RUNTIME)
3939
@Documented
40-
@Import(ConfigurationPropertiesScanRegistrar.class)
40+
@Import({ ConfigurationPropertiesScanRegistrar.class, ConfigurationPropertiesBindingPostProcessorRegistrar.class })
4141
public @interface ConfigurationPropertiesScan {
4242

4343
/**

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrarTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ void scanWhenBasePackagesAndBasePackcageClassesProvidedShouldUseThat() throws IO
9292
BeanDefinition bSecondDefinition = beanFactory.getBeanDefinition(
9393
"b.second-org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration$BSecondProperties");
9494
assertThat(aDefinition).isExactlyInstanceOf(GenericBeanDefinition.class);
95-
assertThat(bFirstDefinition).isExactlyInstanceOf(GenericBeanDefinition.class);
95+
// Constructor injection
96+
assertThat(bFirstDefinition).isExactlyInstanceOf(ConfigurationPropertiesBeanDefinition.class);
97+
// Post-processing injection
9698
assertThat(bSecondDefinition).isExactlyInstanceOf(GenericBeanDefinition.class);
9799
}
98100

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanTests.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727
import org.springframework.boot.context.properties.scan.valid.a.AScanConfiguration;
2828
import org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration.BFirstProperties;
2929
import org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration.BProperties;
30+
import org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration.BSecondProperties;
3031
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
3132
import org.springframework.core.io.ByteArrayResource;
3233
import org.springframework.core.io.DefaultResourceLoader;
3334
import org.springframework.core.type.classreading.MetadataReader;
3435
import org.springframework.core.type.classreading.MetadataReaderFactory;
3536
import org.springframework.core.type.filter.AssignableTypeFilter;
37+
import org.springframework.test.context.support.TestPropertySourceUtils;
3638

3739
import static org.assertj.core.api.Assertions.assertThat;
3840
import static org.mockito.BDDMockito.given;
@@ -44,6 +46,7 @@
4446
*
4547
* @author Madhura Bhave
4648
* @author Johnny Lim
49+
* @author Stephane Nicoll
4750
*/
4851
class ConfigurationPropertiesScanTests {
4952

@@ -115,8 +118,16 @@ void scanImportBeanRegistrarShouldApplyTypeExcludeFilter() {
115118
"b.first-org.springframework.boot.context.properties.scan.valid.b.BScanConfiguration$BFirstProperties");
116119
}
117120

118-
private void load(Class<?>... classes) {
119-
this.context.register(classes);
121+
@Test
122+
void scanShouldBindConfigurationProperties() {
123+
load(TestAnotherPackageConfiguration.class, "b.first.name=constructor", "b.second.number=42");
124+
assertThat(this.context.getBean(BFirstProperties.class).getName()).isEqualTo("constructor");
125+
assertThat(this.context.getBean(BSecondProperties.class).getNumber()).isEqualTo(42);
126+
}
127+
128+
private void load(Class<?> configuration, String... inlinedProperties) {
129+
this.context.register(configuration);
130+
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context, inlinedProperties);
120131
this.context.refresh();
121132
}
122133

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/scan/valid/b/BScanConfiguration.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,31 @@ public interface BProperties {
3030
@ConfigurationProperties(prefix = "b.first")
3131
public static class BFirstProperties implements BProperties {
3232

33+
private final String name;
34+
35+
public BFirstProperties(String name) {
36+
this.name = name;
37+
}
38+
39+
public String getName() {
40+
return this.name;
41+
}
42+
3343
}
3444

3545
@ConfigurationProperties(prefix = "b.second")
3646
public static class BSecondProperties implements BProperties {
3747

48+
private int number;
49+
50+
public int getNumber() {
51+
return this.number;
52+
}
53+
54+
public void setNumber(int number) {
55+
this.number = number;
56+
}
57+
3858
}
3959

4060
}

0 commit comments

Comments
 (0)