前言
我们在使用SpringBoot程序开发的时候会发现比Spring程序编写起来容易的多。配置简洁,依赖关系简单,启动运行容易。那么接下来我们我们就要思考一下这些功能是怎么实现的, 这也是面试中的常见问题,务必掌握!
接下来我们从以下几个方面着手研究
-
SpringBoot的启动依赖
-
启动器starter有什么作用
-
启动引导类是怎么运行的
-
内置的tomcat服务器原理
-
pom.xml文件分析
我们应用配置第一个就是依赖,这个依赖的作用到底是什么我们仔细来分析一下。
-
项目中的pom.xml中继承了一个坐标
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent>
注意:这里parent的坐标被工程继承了,相当于这是一个父类,我们创建的工程是一个子类,用到了父类的东西。
-
打开
spring-boot-starter-parent
之后,发现他又继承了一个坐标。
-
继续打开
spring-boot-dependencies
之后,发现该文件中主要定义了两组信息,分别是各种依赖的版本号和所有依赖的坐标信息,并对声明的版本号做了一个引用。我们打开发现这里有两千多行,所有能配置的版本基本都包含了。
-
由于Spring Boot工程使用到了maven的聚合工程,所以这里我们可以认为
spring-boot-dependencies
就是父工程,子工程就是我们自己的项目。当我们子工程中使用 继承父类之后,所有的版本就都由父类决定了。
可以看到子工程当中我们没有声明版本号,是因为所有的版本都由父类决定,这样做的好处是什么: 解决了版本冲突。不同模块、不同功能之间使用的版本是不一样的 ,因此spring boot就为我们将所有的版本统一化了。
启动器starter
Spri