1、@SpringbootApplication
该注解主要由三个不同的注解组成:@SpringbootConfiguration,@EnableAutoConfiguration,@ComponentScan
- @SpringbootConfiguration 负责spring自动扫描添加了@Configuration的类
- @EnableAutoConfiguration 负责对大量第三方库或者spring内部库的默认配置
- @ComponentScan 类似与<context:component-scan>标签的作用,通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
2、默认配置原理
- @EnableAutoConfiguration开启了自动配置,但是真正定义默认配置的地方在于项目子包 spring-boot-autoconfigure
- 例如springmvc的自动配置:
- 打开WebMvcAutoConfiguration:
- 默认配置的属性来源,WebMvcAutoConfiguration里面的静态类WebMvcAutoConfigurationAdapter,通过@EnableAutoConfiguration注解引入了两个配置类:WebMvcProperties和ResourceProperties:
- 接着通过构造函数注入属性值,注入方式见另一篇博文中的栏目@ConfigurationProperties 注入属性
ResourceProperties中主要定义了静态资源(.js,.html,.css等)的路径:
如果我们要覆盖这些默认属性,只需要在application.properties中定义与其前缀prefix和字段名一致的属性即可
3、配置总结
SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个:
你引入了相关依赖
你自己没有配置
1)启动器
所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。
2)全局配置
另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。