文章目录
一、SpringBoot概述
SpringBoot是搭建应用的手脚架,由Spring公司的核心团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突等问题得到了很好的解决
官方学习参考文档:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/
SpringBoot的特点:
1、 快速创建独立的Spring应用
2、 提供固定的启动器依赖(启动器即Spring Boot提供的一个jar包)去简化组件配置,通过自己设置参数(.properties或.yml的配置文件),实现快速使用的效果
3、 提供了一些大型项目中常见的非功能性特性,如内嵌服务器(如tomcat、jetty、undertow)、安全、指标,健康检测、外部化配置等
4、 自动配置Spring和其它有需要的第三方依赖,无需 XML 配置
二、SpringBoot:启动器&自动配置
Spring Boot的核心:启动器&自动配置原理
总结:springBoot在启动过程当中会加载META-INF/spring.factories文件,文件中包含了所有的自动配置类,自动配置类上有一个条件注解@ConditionalOnClass,必须满足这个条件注解,配置类才生效。只要加入相关的启动器依赖,条件注解就会生效,配置类就生效了
Spring Boot启动器的作用
● 配置一个启动器它会把整合这个框架或模块的依赖全部导入
● 每一个启动器都有一个自动配置类,实现自动整合Spring
● 每一个启动器都有一个配置属性类,提供了默认整合的属性配置
自动配置原理
1. 首先来自启动类的main方法
特别的两个地方:
注解: @SpringBootApplication 【重点】
run方法: SpringApplication.run() 运行spring应用(创建spring容器)
2. @SpringBootApplication注解
相当于以下三个注解的组合:
@SpringBootConfiguration 【作用: 定义配置类】
@EnableAutoConfiguration 【作用: 启用自动配置】
@ComponentScan 【作用: 组件扫描】
注解说明:
注解@EnableAutoConfiguration,告诉SpringBoot基于你所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
注解@ComponentScan,配置组件扫描的指令。提供了类似与context:component-scan
标签的作用通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
3. 自动配置实现流程
SpringApplication在运行Spring应用时,是通过SpringFactoriesLoader的loadSpringFactories()方法,初始化Spring工厂实例。
META-INF/spring.factories工厂配置文件
加载该文件,判断对应的启动器是否导入,如果导入就创建实例,自动注入默认属性
这个key所对应的值,就是所有的自动配置类,可以在当前的jar包中找到这些自动配置类:
每个包都有一个XxxAutoConfiguration配置类,都是一个基于纯注解的配置类,是各种框架整合的代码
该自动配置类,如果有默认属性,在该包下就会有一个XxxProperties属性类:
配置属性介绍
Spring Boot为所有的启动器提供了默认的属性配置,如果我们需要修改就必须要知道哪些属性是属于哪些启动器的默认配置。
官方属性配置介绍: https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#appendix
配置属性流程
从官方文档中找对应的属性,是件很麻烦的事情,因为属性太多,也不知道到底是哪个自动配置类的属性。
配置步骤:
第一步:配置一个自动配置类的属性,先到spring-boot-autoconfigure-2.1.6.RELEASE.jar找到对应的模块
第二步:如果该自动配置类有可以配置的属性,那么对应的整合模块中一定有一个XxxProperties属性类,在里面找可以配置的属性
第三步:在resources目录下的application.properties或application.yml文件里面可以修改 XxxProperties类中默认的属性
小结
Spring Boot自动配置原理:
1、 SpringApplication会寻找 META-INF/spring.factories 文件,读取其中以EnableAutoConfiguration 为key的所有类的名称, 这些类就是提前写好的自动配置类
2、 这些类都声明了@Configuration注解,并且通过@Bean注解提前配置了我们所需要的一切实例,完成自动配置
3、 这些配置类不一定全部生效,因为有@ConditionalOn注解,满足一定条件才会生效。(类存在条件)
4、 我们可以通过配置application.yml或application.properties文件,来覆盖自动配置中的属性
Spring Boot开发两个重点:
1、 找Spring Boot提供的starter启动器
2、 配置属性覆盖starter启动器中自动配置类的默认属性
总结
springBoot在启动过程当中会加载META-INF/spring.factories文件,文件中包含了所有的自动配置类,自动配置类上有一个条件注解@ConditionalOnClass,必须满足这个条件注解,配置类才生效。只要加入相关的启动器依赖,条件注解就会生效,配置类就生效了