Spring Boot 之主启动类
@Configuration // 表示这是一个配置类,和配置文件一样,也可以给容器中添加组件
/*
启动指定类的 ConfigurationProperties 功能;
将配置文件中对应的值和 HttpEncodingProperties 绑定起来;
并把 HttpEncodingProperties 加入到ioc容器中
*/
@EnableConfigurationProperties(HttpEncodingProperties.class)
/*
Spring 底层 @Conditional 注解(Spring注解版),
如果满足指定的条件,整个配置类里面的配置就会生效;
判断当前应用是否是 web 应用,如果是,当前配置类生效
*/
@ConditionalOnWebApplication
// 判断当前项目有没有 CharacterEncodingFilter:SpringMVC中进行乱码解决的过滤器;
@ConditionalOnClass(CharacterEncodingFilter.class)
/*
判断配置文件中是否存在配置:,如果不存在,判断也成立
即使配置文件中不配置 =true,也默认生效的
*/
@ConditionalOnProperty(prefix = "", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {
// 和 SpringBoot 的配置文件映射
private final HttpEncodingProperties properties;
// 只有一个有参构造器的情况下,参数的值就会从容器中拿
public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
this.properties = properties;
}
@Bean // 给容器中添加一个组件,组件的某些值需要从 properties 中获取
@ConditionalOnMissingBean(CharacterEncodingFilter.class) // 判断容器是否有这个组件
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
return filter;
}
}