为什么学SpringBoot?
Spring Boot 简化了基于Spring的应用开发,只需要"run"就能创建一个独立的、生产级别的Spring应用。
Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器 starter),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。
Spring Boot 主要特点是:
- 创建独立的Spring应用,为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
- 直接嵌入应用服务器,如tomcat、jetty、undertow等;不需要去部署war包
- 提供固定的启动器依赖去简化组件配置;实现开箱即用(启动器starter-其实就是Spring Boot提供的一个jar 包),通过自己设置参数(.properties或.yml的配置文件),即可快速使用。
- 自动地配置Spring和其它有需要的第三方依赖
- 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
- 绝对没有代码生成,也无需 XML 配置。
启动类
Spring Boot项目通过main函数即可启动,我们需要创建一个启动类:
启动类需要加上@SpringBootApplication注解,通过run()方法来启动程序。
自动装配
SpringBoot核心注解@SpringBootApplication。是一个组合注解,组合了@ComponentScan、@SpringBootConfiguration、@EnableAutoConfiguration 。
@EnableAutoConfiguration 注解组合了 @AutoConfigurationPackage 、
@Import(AutoConfigurationImportSelector.class) 注解。
@AutoConfigurationPackage 底层也是一个 @Import(AutoConfigurationPackages.Registrar.class) ,
其会把启动类的包下组件都扫描到 Spring 容器中。
@Import(AutoConfigurationImportSelector.class) 自动配置的核心类
AutoConfigurationImportSelector.class ,该类导入大量的自动配置类, debug 可以发现,其读取的是 classpath下的 META-INF/spring.factories下配置文件。
当然 spring.factories 文件中配置类默认不会都生效,具体哪些配置类生效由配置类上标注的
@ConditionalOnClass 注解来决定。
总结:
Spring Boot 通过 maven 中的 starter 导入了所需场景下的 jar 包,并通过主启动类上的
@SpringBootApplication 中的 @EnableAutoConfiguration 读取了类路径下的 META
INF/spring.factories 下 EnableAutoConfiguration 的配置类,这些配置类使用
@ConditionalOnClass 来标注,根据 @ConditionalOnClass 标注的约束条件来引入自动化的环境配置。
如果我们自己配置了相关Bean,那么会覆盖默认的自动配置的Bean我们还可以通过配置application.yml文件,来覆盖自动配置中的属性
全局配置
SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义 application.properties 文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。因此,学习SpringBoot的第二件事情,就是通过 application.properties 来覆盖默认属性值,形成自定义配置。我们需要知道SpringBoot的默认属性key,非常多,可以再idea中自动提示。
属性文件支持两种格式,application.properties和application.yml。如果properties和yml文件都存在,如果有重叠属性,默认以Properties优先。遇到需要修改的组件的配置项流程为: