一. 基本概述
1. 背景介绍
spring boot是一个spring官方推出的开源框架,目的是降低spring的使用难度,比如它的自动配置功能可以省去繁杂的配置工作,比如它提供了许多启动器,让开发人员能快速搭建一个spring应用。
2. 优缺点
-
优点:
- 更简单地进行编码:它提供了自动配置功能,减少了开发人员的配置工作;它遵循约定大于配置原则,提供了许多默认的配置,让开发人员可以快速开始业务编码,而不需要过多关注配置
- 更简单地进行部署:它内置了常见的服务器(如:Tomcat),使得应用程序可以作为一个独立的jar文件运行
- 更简单地进行监控:它集成了各种监控工具(如:spring boot actuator),方便查看程序的健康状况
-
缺点:
- 集成了大量功能组件,程序体积变大,启动变慢
二. 核心原理
1. 自动配置
1.1 概念介绍
springBoot可以根据项目中引入的依赖库和配置信息,自动配置各种组件和功能,大大简化了开发者的工作,让开发者可以快速构建出一个完整的应用程序。
1.2 原理介绍
springBoot的自动配置主要包括两个过程:
- 获取自动配置类:spring boot需要读取META-INF目录下,spring.factories文件中的自动配置类
- 获取配置文件中的配置:spring boot需要将将配置文件中的参数与自动配置类绑定
以下是具体过程:
①. 引入AutoConfigurationImportSelector
类:
在springBoot的启动类上有个@springBootConfiguration
注解,
该注解包含一个@EnableAutoConfiguration
注解,
这个注解本身又包含一个@Import
注解,最后@Import
注解引入这个AutoConfigurationImportSelector
类:
@Import(AutoConfigurationImportSelector.Class)
②:找到spring .factories文件:
该组件有一个selectorImports
方法,这个方法通过springFactoriesLoader .loaderFactoryName()
加载所有META-INF下的spring .factories文件,这些文件中以键值对的形式存放了一些后缀名为AutoConfiguration的某某AutoConfiguration自动配置类
③. 实例化这些自动配置类:
spring boot可以通过各种条件注解,让这些自动配置类在满足条件的时候生效,
比如@conditionalOnBean
、@conditionalOnMissingBean
,可以在容器中有或者没有指定bean的时候生效,spring boot会根据这些条件将它们实例化
④. 读取配置文件中的配置
在实例化之后,spring boot会读取配置文件中的参数,绑定到类中对应的属性上,这个过程是通过@ConfigurationProperties
完成的,pring Boot会自动读取配置文件中的属性值,并将其绑定到对应的@ConfigurationProperties
注解标注的类的属性上
每个自动配置类上面有一个@EnableConfigurationProperties注解,@EnableConfigurationProperties注解是用来开启属性配置的,其后带一个参数,通常是一个以“Properties”结尾的类(例如MyProperties.class)。这个类里面的属性对应了配置文件中的配置项,通过@ConfigurationProperties注解可以将配置文件中的参数绑定到这些属性上,完成属性配置。
@ConfigurationProperties注解用于将外部配置文件中的属性值与一个JavaBean的属性进行绑定
⑤. 导入到容器
最后,将绑定好参数的自动配置类放入容器中,至此,springBoot的自动配置完成
2. starter
2.1 概念介绍
springBoot中的starter是一种用于简化依赖管理的特殊类型依赖项,它包含了一组预定义的依赖项,配置文件,自动配置类的实现,使得开发人员可以快速构建出一个spring应用程序;通俗点讲就是:starter就是对一个实现了某个功能的模块的封装,这个模块要实现功能需要一些依赖,还有必要的配置,starter就集成了这些依赖和配置,另外还有关于这些依赖相关的自动配置类,spring boot需要扫描并导入它们到容器中
一个starter包含以下部分:
- 依赖项:包含了实现这个功能的一系列依赖,比如,spring-boot-starter-web这个starter是一个用于实现web功能的模块,它需要依赖servlet、tomcat等
- 配置文件:starter会为依赖项提供默认配置,遵循着“约定大于配置”原则,做到开箱即用
- 自动配置类:spring boot根据这些自动配置类信息结合配置文件,自动配置它们
2.2 原理介绍
这些导入的依赖项jar包中,会包含对应的spring.factories文件,spring boot会自动扫描这些jar包下的spring.factories文件,通过自动配置功能,完成依赖的配置工作(具体过程如上2.1)。所以我们在引入一个starter的时候,不需要做过多的配置和引入相关依赖,starter中已经包含了必要的信息,而spring boot会根据这些信息自动加载它们,我们直接用就行
3.springBoot如何读取配置文件
- 通过@ConfigurationProperties
- 通过@Value
4. actutor
这是springBoot中的一个模块,主要用于监控和管理应用程序,它内置了很多端点,通过访问这些端点,可以查看程序的健康状态,配置信息,日志,性能指标等等