Add common definition annotations support for ConfigurationProperties
Update `` to ensure that common bean definition annotations, such as `@Lazy`, `@Primary` and `@Fallback`, are applied. See gh-42289
This commit is contained in:
committed by
Phillip Webb
parent
3723a9e040
commit
44be2e11d9
@@ -23,8 +23,8 @@ import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefiniti
|
||||
import org.springframework.beans.factory.config.BeanDefinitionHolder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.context.properties.bind.BindMethod;
|
||||
import org.springframework.context.annotation.AnnotationConfigUtils;
|
||||
import org.springframework.context.annotation.AnnotationScopeMetadataResolver;
|
||||
import org.springframework.context.annotation.ScopeMetadata;
|
||||
import org.springframework.context.annotation.ScopeMetadataResolver;
|
||||
@@ -42,6 +42,7 @@ import org.springframework.util.StringUtils;
|
||||
*
|
||||
* @author Madhura Bhave
|
||||
* @author Phillip Webb
|
||||
* @author Yanming Zhou
|
||||
*/
|
||||
final class ConfigurationPropertiesBeanRegistrar {
|
||||
|
||||
@@ -88,7 +89,8 @@ final class ConfigurationPropertiesBeanRegistrar {
|
||||
}
|
||||
|
||||
private BeanDefinitionHolder createBeanDefinition(String beanName, Class<?> type) {
|
||||
GenericBeanDefinition definition = new AnnotatedGenericBeanDefinition(type);
|
||||
AnnotatedGenericBeanDefinition definition = new AnnotatedGenericBeanDefinition(type);
|
||||
AnnotationConfigUtils.processCommonDefinitionAnnotations(definition);
|
||||
BindMethod bindMethod = ConfigurationPropertiesBean.deduceBindMethod(type);
|
||||
BindMethodAttribute.set(definition, bindMethod);
|
||||
if (bindMethod == BindMethod.VALUE_OBJECT) {
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.context.properties.bind.BindMethod;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.annotation.ScopedProxyMode;
|
||||
|
||||
@@ -38,6 +39,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
* @author Madhura Bhave
|
||||
* @author Stephane Nicoll
|
||||
* @author Phillip Webb
|
||||
* @author Yanming Zhou
|
||||
*/
|
||||
class ConfigurationPropertiesBeanRegistrarTests {
|
||||
|
||||
@@ -122,6 +124,15 @@ class ConfigurationPropertiesBeanRegistrarTests {
|
||||
assertThat(beanDefinition.getScope()).isEqualTo(BeanDefinition.SCOPE_PROTOTYPE);
|
||||
}
|
||||
|
||||
@Test
|
||||
void registerBeanDefinitionWithCommonDefinitionAnnotations() {
|
||||
String beanName = "beancp-" + PrimaryConfigurationProperties.class.getName();
|
||||
this.registrar.register(PrimaryConfigurationProperties.class);
|
||||
BeanDefinition beanDefinition = this.registry.getBeanDefinition(beanName);
|
||||
assertThat(beanDefinition).isNotNull();
|
||||
assertThat(beanDefinition.isPrimary()).isEqualTo(true);
|
||||
}
|
||||
|
||||
private Consumer<BeanDefinition> hasBindMethodAttribute(BindMethod bindMethod) {
|
||||
return (definition) -> {
|
||||
assertThat(definition.hasAttribute(BindMethod.class.getName())).isTrue();
|
||||
@@ -146,6 +157,12 @@ class ConfigurationPropertiesBeanRegistrarTests {
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties(prefix = "beancp")
|
||||
@Primary
|
||||
static class PrimaryConfigurationProperties {
|
||||
|
||||
}
|
||||
|
||||
static class NoAnnotationConfigurationProperties {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user