自动配置示例
HttpEncodingAutoConfiguration
Http编码自动配置
以该类为例,查看自动配置过程
EnableAutoConfiguration
HttpEncodingAutoConfiguration
点击,进入
@Configuration
表示这是一个配置类
与以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties({HttpEncodingProperties.class})
启动指定类的ConfigurationProperties功能
将配置文件中对应的值和HttpEncodingProperties绑定起来
并把HttpEncodingProperties加入到ioc容器中
点击,进入
@ConfigurationProperties
从配置文件中,获取指定的值
和bean的属性进行绑定
所有在配置文件中能配置的属性
都是在xxxxProperties类中封装者
配置文件能配置什么
就可以参照某个功能,对应的这个属性类
@ConditionalOnWebApplication
Spring底层@Conditional注解
根据不同的条件
如果,满足指定的条件
整个配置类里面的配置就会生效
判断当前应用是否是web应用
如果是,当前配置类生效
@ConditionalOnClass(CharacterEncodingFilter.class)
判断当前项目
有没有这个类CharacterEncodingFilter
SpringMVC中进行乱码解决的过滤器
@ConditionalOnProperty(prefix = “spring.http.encoding”, value = “enabled”, matchIfMissing =true)
判断配置文件中
是否存在某个配置 spring.http.encoding.enabled
如果,不存在,判断也是成立的
即使,配置文件中不配置pring.http.encoding.enabled=true
也是默认生效的
根据当前不同的条件判断,决定这个配置类是否生效
一但这个配置类生效,这个配置类就会给容器中添加各种组件
这些组件的属性,是从对应的properties类中获取的
这些类里面的每一个属性,又是和配置文件绑定的
private final HttpEncodingProperties properties;
已经和SpringBoot的配置文件映射了
public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
this.properties = properties;
}
只有一个有参构造器的情况下
参数的值就会从容器中拿
@Bean
给容器中添加一个组件
这个组件的某些值,需要从properties中获取
@ConditionalOnMissingBean(CharacterEncodingFilter.class)
判断容器,有没有这个组件