Skip to content

Commit d3a2bf4

Browse files
committed
Merge pull request #42289 from quaff
* pr/42289: Add common definition annotations support for ConfigurationProperties Closes gh-42289
2 parents 27169a9 + 44be2e1 commit d3a2bf4

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.springframework.beans.factory.config.BeanDefinitionHolder;
2424
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
2525
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
26-
import org.springframework.beans.factory.support.GenericBeanDefinition;
2726
import org.springframework.boot.context.properties.bind.BindMethod;
27+
import org.springframework.context.annotation.AnnotationConfigUtils;
2828
import org.springframework.context.annotation.AnnotationScopeMetadataResolver;
2929
import org.springframework.context.annotation.ScopeMetadata;
3030
import org.springframework.context.annotation.ScopeMetadataResolver;
@@ -42,6 +42,7 @@
4242
*
4343
* @author Madhura Bhave
4444
* @author Phillip Webb
45+
* @author Yanming Zhou
4546
*/
4647
final class ConfigurationPropertiesBeanRegistrar {
4748

@@ -88,7 +89,8 @@ private void registerBeanDefinition(String beanName, Class<?> type,
8889
}
8990

9091
private BeanDefinitionHolder createBeanDefinition(String beanName, Class<?> type) {
91-
GenericBeanDefinition definition = new AnnotatedGenericBeanDefinition(type);
92+
AnnotatedGenericBeanDefinition definition = new AnnotatedGenericBeanDefinition(type);
93+
AnnotationConfigUtils.processCommonDefinitionAnnotations(definition);
9294
BindMethod bindMethod = ConfigurationPropertiesBean.deduceBindMethod(type);
9395
BindMethodAttribute.set(definition, bindMethod);
9496
if (bindMethod == BindMethod.VALUE_OBJECT) {

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
2727
import org.springframework.beans.factory.support.GenericBeanDefinition;
2828
import org.springframework.boot.context.properties.bind.BindMethod;
29+
import org.springframework.context.annotation.Primary;
2930
import org.springframework.context.annotation.Scope;
3031
import org.springframework.context.annotation.ScopedProxyMode;
3132

@@ -38,6 +39,7 @@
3839
* @author Madhura Bhave
3940
* @author Stephane Nicoll
4041
* @author Phillip Webb
42+
* @author Yanming Zhou
4143
*/
4244
class ConfigurationPropertiesBeanRegistrarTests {
4345

@@ -122,6 +124,15 @@ void registerScopedBeanDefinitionWithProxyMode() {
122124
assertThat(beanDefinition.getScope()).isEqualTo(BeanDefinition.SCOPE_PROTOTYPE);
123125
}
124126

127+
@Test
128+
void registerBeanDefinitionWithCommonDefinitionAnnotations() {
129+
String beanName = "beancp-" + PrimaryConfigurationProperties.class.getName();
130+
this.registrar.register(PrimaryConfigurationProperties.class);
131+
BeanDefinition beanDefinition = this.registry.getBeanDefinition(beanName);
132+
assertThat(beanDefinition).isNotNull();
133+
assertThat(beanDefinition.isPrimary()).isEqualTo(true);
134+
}
135+
125136
private Consumer<BeanDefinition> hasBindMethodAttribute(BindMethod bindMethod) {
126137
return (definition) -> {
127138
assertThat(definition.hasAttribute(BindMethod.class.getName())).isTrue();
@@ -146,6 +157,12 @@ static class ProxyScopedBeanConfigurationProperties {
146157

147158
}
148159

160+
@ConfigurationProperties(prefix = "beancp")
161+
@Primary
162+
static class PrimaryConfigurationProperties {
163+
164+
}
165+
149166
static class NoAnnotationConfigurationProperties {
150167

151168
}

0 commit comments

Comments
 (0)