Spring Boot 之主启动类

时间:2025-04-23 20:09:47
@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; } }