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等等