JSR 303校验
JSR 303 是JAVA EE 6 中的一项子规范,叫做 Bean Validation。
JSR 303 用于对 Java Bean 中的数据进行验证。
分析自动配置原理
在spring.factories下随便打开一个类进行分析,这里以HttpEncodingAutoConfiguration(Http编码自动配置)为例进行分析。
进入这个配置类:
@Configuration(
proxyBeanMethods = false
)
@EnableConfigurationProperties({HttpProperties.class})
@ConditionalOnWebApplication(
type = Type.SERVLET
)
@ConditionalOnClass({CharacterEncodingFilter.class})
1.@Configuration( proxyBeanMethods = false )
表示这是一个配置类,和配置文件一样,也可以给容器添加组件。
2.@EnableConfigurationProperties({HttpProperties.class})
此注解 启动类的 ConfigurationProperties 功能
进入 HttpProperties
3.@ConfigurationProperties( prefix = "spring.http")
将配置文件和 HttpProperties 绑定起来。(从配置文件中获取指定的值,和bean的属性进行绑定)
看到这个注解,有点熟悉,在上一篇yaml配置文件中学到,将yaml中的值注入到所需类中时,用的就是这个注解:
-
将配置文件中配置的每一个属性的值,映射到该组件中
-
告诉SpringBoot将该类中的所有属性和配置文件中相关的配置进行绑定
4.@ConditionalOnWebApplication( type = Type.SERVLET )
@Conditional Spring的底层注解,判断作用:如果满足指定条件,整个配置类里面的配置才会生效。
5.@ConditionalOnClass({CharacterEncodingFilter.class})
判断当前项目中是否存在 CharacterEncodingFilter 类(SpringMVC中乱码解决的过滤器)
总结
- 自动配置必须在一定条件下才能生效(@Conditional 指定的条件成立)
- 一旦这个配置类生效,它就会给容器中添加各个组件
- 所有配置文件中能配置的属性都在xxxProperties类中封装着
- 配置文件能配置什么就可以参照某个功能对应的这个属性类
- xxxAutoConfiguration:自动配置类:给容器中添加组件
- xxxProperties:封装配置文件中的相关属性
补充知识点
SpringBoot中有很多配置类,但不是所有的都生效了。
此时,我们可以通过启用 debug=true 属性,来让控制台打印自动配置报告,然后就可以很容易的查看哪些自动配置类生效了。
#开启springboot的调试类
debug: true
开启服务之后,控制台会将结果打印出来。
自动配置类启用
启用失败的自动配置类
没有条件的类