概述
ConfigurationPropertiesAutoConfiguration
是Spring Boot
关于处理使用注解@ConfigurationProperties
的bean
组件的自动配置类。
具体来讲,ConfigurationPropertiesAutoConfiguration
引用了注解@EnableConfigurationProperties
,而注解@EnableConfigurationProperties
导入了EnableConfigurationPropertiesImportSelector
,EnableConfigurationPropertiesImportSelector
所做的工作,才真正是ConfigurationPropertiesAutoConfiguration
最终预期的效果。
EnableConfigurationPropertiesImportSelector
是Spring Boot
提供的一个ImportSelector
实现,其目的是绑定外部属性到使用了注解@ConfigurationProperties
的属性配置bean
上。但具体的属性绑定的动作并不是由它自身完成的,而是由它所指定的两个ImportBeanDefinitionRegistrar
所注册到容器的bean
来完成的 :
ConfigurationPropertiesBeanRegistrar
该ImportBeanDefinitionRegistrar
是EnableConfigurationPropertiesImportSelector
定义的一个内部类,它用于获取配置类上注解@EnableConfigurationProperties
指定的要注册为bean
的属性配置类,并将它们作为bean
注册到容器。ConfigurationPropertiesBindingPostProcessorRegistrar
EnableConfigurationPropertiesImportSelector
通过ConfigurationPropertiesBindingPostProcessorRegistrar
注册一个ConfigurationPropertiesBindingPostProcessor
到容器,该ConfigurationPropertiesBindingPostProcessor
则会扫描每个bean
,如果该bean
是一个使用了注解@ConfigurationProperties
的bean
,则将@ConfigurationProperties
注解所指定的属性绑定为该bean
的属性。
EnableConfigurationPropertiesImportSelector
确保了属性绑定所需的ConfigurationPropertiesBeanRegistrar
和ConfigurationPropertiesBindingPostProcessor
两个工作组件提前就绪。
源代码
源代码版本 :
spring-boot-autoconfigure-2.1.3.RELEASE
package org.springframework.boot.autoconfigure.context;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* {@link EnableAutoConfiguration Auto-configuration} for {@link ConfigurationProperties}
* beans. Automatically binds and validates any bean annotated with
* {@code @ConfigurationProperties}.
*
* @author Stephane Nicoll
* @since 1.3.0
* @see EnableConfigurationProperties
* @see ConfigurationProperties
*/
@Configuration
@EnableConfigurationProperties // ⇐ 主要动作
public class ConfigurationPropertiesAutoConfiguration {
}