Springboot2.0.X自动装配原理自动装配原理

1.Springboot2.0.X自动装配原理自动装配原理
 a.Springboot如何自动装配:
   以HttpEncodingAutoConfiguration通过源码为例;
     1.@Configuration:标识此类为配置类,将此类纳入SpringIOC容器;
     2. @EnableConfigurationProperties(value=HttpEncodingProperties.class)
        通过HttpEncodingProperties将默认编码设置为UTF-8(自动装配为UTF-8)
     3. 修改默认编码
        通过HttpEncodingProperties中的prefix+属性名(charset)进行修改[在配置文件中yml/properties],
        该注解提供了默认的utf-8,并提供了prefix+属性名的方式来修改编码;
        在配置文件中配置;
        spring.http.encoding.charset=ISO-8859-1        
     3.@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
          如果是一个servlet项目,则成立
        @ConditionalOnClass(CharacterEncodingFilter.class)
          如果有CharacterEncodingFilter则成立
        @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
          Conditional条件;on当...的时候;WebApplication web应用;
          value:等价于name;
          prefix:前缀;
          matchIfMissing:如果没有匹配则满足;
        当属性满足条件时,此条件成立:如果没有配置spring.http.encoding.enabled=xxxx,则条件成立;

HttpEncodingAutoConfiguration

@Configuration  //标识此类为配置类,将此类纳入SpringIOC容器;
 @EnableConfigurationProperties(value=HttpEncodingProperties.class)//  通过HttpEncodingProperties将默认编码设置为UTF-8
 @ConditionalOnWebApplication(type=SERVLET)
 @ConditionalOnClass(value=org.springframework.web.filter.CharacterEncodingFilter.class)
 @ConditionalOnProperty(prefix="spring.http.encoding",
                       value="enabled",
                       matchIfMissing=true)
.......
}


  

 总结:
       1.每个XxAutoConfiguration都有很多@ConditionalOnXx,当这些条件满足是,则此配置自动生效;
         但是可以手工修改自动装配XxxProperties中的prefix+属性名=value;
       2.全局配置文件中的key,来源于某个XxxProperties中的prefix+属性名=value;    
    
    2.如何知道springboot开启,禁止了哪些自动装配?
        1.在application.properties文件中配置 debug=true
           Positive matches:开启的自动配置
           Negative matches:禁止的自动配置
        
    

发布了178 篇原创文章 · 获赞 11 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览