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:禁止的自动配置