springBoot自动配置原理分析

    技术2022-07-12  71

    // 表示只是一个配置类、和以前编写的配置文件一样 @Configuration(proxyBeanMethods = false) // 指定配置文件,httpProperties 对应我们编程配置文件,假设配置文件中有就有配置文件,没有就用默认值 @EnableConfigurationProperties(ServerProperties.class) //ConditionalOnXX Spring底层注解 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) //如果CharacterEncodingFiler 这个类,这个配置才生效 @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration { private final Encoding properties; public HttpEncodingAutoConfiguration(ServerProperties properties) { this.properties = properties.getServlet().getEncoding(); } @Bean @ConditionalOnMissingBean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter(); filter.setEncoding(this.properties.getCharset().name()); filter.setForceRequestEncoding(this.properties.shouldForce(Encoding.Type.REQUEST)); filter.setForceResponseEncoding(this.properties.shouldForce(Encoding.Type.RESPONSE)); return filter; } @Bean public LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() { return new LocaleCharsetMappingsCustomizer(this.properties); } static class LocaleCharsetMappingsCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>, Ordered { private final Encoding properties; LocaleCharsetMappingsCustomizer(Encoding properties) { this.properties = properties; } @Override public void customize(ConfigurableServletWebServerFactory factory) { if (this.properties.getMapping() != null) { factory.setLocaleCharsetMappings(this.properties.getMapping()); } } @Override public int getOrder() { return 0; } } } 1.springBoot 启动会加载大量的自动配置类!spring.factories 2.判断我们的类是否存在这里面,如果不存在我们需要手动导入、如果存在导入启动器! 3.我们的配置文件之所以可以自动配置生效 xxxAutoConfiguation: 自动配置类,根据条件@ConfitionalOnxxx判断是否生效:如果生效则成功注入bean; xxxProperties:封装配置文件的相关属性; 4.给容器中自动配置类配置属性的时候,会通过xxxPorperties 类来获取某用户文件中的属性,如果没有则使用默认的,如果有则自动配置
    Processed: 0.010, SQL: 9