先上图
在application.properties中设置debug=true,可用在控制台查看一起用和未启用的自动配置类。
@SpringBootApplication注解是@Configuration注解、@EnableAutoConfiguration注解和@ComponentScan注解的组合。其中,@Configuration表示该类是Java配置类。
@ComponentScan开启了自动扫描符合条件的bean(例如@Controller、@Service等注解)
@EnableAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置,比如添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,然后SpringBoot会对Tomcat和SpringMVC进行自动配置(spring.factories里面的EnableAutoConfiguration配置了WebMvcAutoConfiguration)。
@EnableAutoConfiguration注解主要由@AutoConfigurationPackage,@Import({
AutoConfigurationImportSelector.class})构成的。@AutoConfigurationPackage用于将启动类所在的包里面的所有组件注册到spring容器里。
@Import将AutoConfigurationImportSelector注入到Spring容器中,AutoConfigurationImportSelector通过SpringFactoriesLoader从类路径下去读取META-INF/spring.factories文件信息,此文件中有一个key为org.springframework.boot.autoconfigure.EnableAutoConfiguration,定义了一组需要自动配置的bean
这些配置类不是都会被加载,会根据xxxAutoConfiguration上的@ConditionalOnClass等条件判断是否加载,符合条件才会将相应的组件加载到Spring容器中。(比如mybatis-spring-boot-starter,会自动配置SqlSessionFactory、SqlSessionFactoryBean、DataSource等Mybatis)
@ConfigurationProperties的作用就是将配置文件的属性绑定到对应的bean上。全局配置的属性如:server.port等,通过@ConfigurationProperties注解,绑定到对应的XxxxProperties bean,通过这个bean获取相应的属性(serverProperties.getPort())。