SpringBoot核心注解:
@SpringBootConfiguration 等价于@Configuration, 用于声明一个配置类
@EnableAutoConfiguration 启动自动配置。框架底层提供很多配置,当增加相应的启动器,这些配置就会自动生效。
@ComponentScan 扫描包注解,默认扫描主程序所在包以及子包
自动配置原理:
1、启动应用时,加载meta-inf/spring.factories文件。这个文件存在于多个jar包的meta-inf目录下
2、主要查看:spring-boot-autoconfigure-2.2.2.RELEASE.jar
找:org.springframework.boot.autoconfigure.EnableAutoConfiguration,获取124个配置类。
3、SpringBoot框架继承了所有第三方框架或组件,并提供了对应的配置类(就相当于xml配置文件的作用)。
这些配置类,当项目中引入了相关的启动器时,对应配置就会生效。
例如:
引入spring-boot-starter-web启动器:
引入核心启动器:支持自动配置auto-configuration,日志logging,yaml
引入json启动器:支持json格式化
引入tomcat启动器:内置tomcat
引入数据校验启动器:做数据校验
依赖spring-web,spring-webmvc包
与该启动器相关的配置就会生效:XXXConfiguration名称里写的配置
例如:
WebMvcAutoConfiguration
HttpEncodingAutoConfiguration
DispatcherServletAutoConfiguration
...等等
4、application主启动类运行的时候,调用run对Springboot应用做初始化操作,它会去找到自动配置jar包(spring.factories),从里面找到工厂文件(124个配置类,例如 WebMvcAutoConfiguration,HttpEncodingAutoConfiguration,RedisAutoConfiguration))
这些配置是否起作用,取决于类上面写的条件注解(@ConditionalOnWebApplication,@ConditionalOnClass,ConditionalOnMissingBean等)
5、配置的属性,来自于框架的出厂设置,如果希望修改默认配置,可以通过配置文件进行修改。并通过xxxProperties封装属性
例如:WebMvcProperties源码就是利用@ConfigurationProperties(prefix = "spring.mvc")批量封装属性的
@ConfigurationProperties(prefix = "spring.mvc)
public class WebMvcProperties {
...
}
例如:需要在properties文件中配置跟redis相关的属性
就可以在spring.factories文件中找跟redis相关的自动配置类auto configuration
spring.factories => RedisAutoConfiguration => RedisProperties => 批量插入的前缀(prefix = "spring.redis")需要写spring redis开头的属性
或者在官方文档appendices附录a => common application properties公共应用属性中找相关的配置
例如:
spring.redis.host = localhost
spring.redis.cluster.max-redirects
spring.redis.database
spring.redis.url等等