code-learning/springboot/04-Spring Boot 源码分析-调试环境搭建(Spring Boot 2.6.0 版本).md

100 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 精尽 Spring Boot 源码分析 —— 调试环境搭建Spring Boot 2.6.0 版本)
> 友情提示:如果胖友对 Spring Boot 的使用不是很了解,可以看看艿艿写的 https://github.com/YunaiV/SpringBoot-Labs 系列文章,大概有 **100+** 个 Spring Boot 使用案例。
今儿,我们来搭建一个 Spring Boot 调试环境,目标是:**启动 Spring Boot成功调试它的启动过程**。
视频可见 B 站https://www.bilibili.com/video/BV1WA411P7Pz/
😝 艿艿比较腼腆,大家给个三连支持一下,感恩 1024~
# 1. 依赖工具
## 1.1 IDEA
当然是 Jetbrains 出品的 IDEA 工具,相信绝大多数胖友都使用的它。
艿艿使用的是 **2020.3** 版本,胖友尽量保证不低于该版本哈。
> 友情提示:如果不知道怎么激活 IDEA 的胖友,可以访问 [《IDEA 激活指南》](https://www.iocoder.cn/IDEA/idea-2020-reset-eval/) 地址,花 5 分钟学习!支持所有版本~
## 1.2 JDK
需要使用 JDK 编译 Spring Boot 的代码,这里艿艿使用的是 JDK **1.8** 版本
```
$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
```
# 2. 源码拉取
使用 IDEA 从官方仓库 https://github.com/spring-projects/spring-boot 克隆项目。
> 友情提示:如果网络不是很好的胖友,可以选择和艿艿一样,使用 Gitee 提供的镜像仓库 https://gitee.com/mirrors/spring-boot
这里,我们使用的 Spring Boot 版本是 [**2.6.0-SNAPSHOT**](https://github.com/spring-projects/spring-boot/blob/main/gradle.properties#L1)。
> 友情提示:胖友可以考虑 Fork 下[官方仓库](https://github.com/spring-projects/spring-boot),为什么呢?
>
> 既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。😜
# 3. 下载依赖
① 克隆完成 Spring Boot 项目之后IDEA 会自动下载需要的 Gradle 工具。如下图所示:
[![下载 Gradle 工具](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/下载 Gradle 工具.png)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/下载 Gradle 工具.png)下载 Gradle 工具
这里,我们使用的 Gradle 版本是 **6.9**
> 友情提示:由于是从国外的网址下载,所以需要耐心等待一会,艿艿花费了 2 分多钟。
② 下载完 Gradle 工具之后IDEA 就会使用它自动下载相关的依赖库。如下图所示:
[![下载依赖](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/下载依赖.png)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/下载依赖.png)下载依赖
因为 Gradle 支持使用 Maven 依赖,所以我们可以使用阿里云的 Maven 镜像 `https://maven.aliyun.com/nexus/content/groups/public/`**。修改 `build.gradle` 文件,如下图所示:
[![下载依赖](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/下载依赖2.png)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/下载依赖2.png)下载依赖
效果非常不错,不过艿艿还是花了 20 分钟才下载完了依赖。主要原因是Spring Boot 内置了 50+ 个 Starter 的实现,导致引入了非常多的依赖。
ps如果中间下载失败点击【绿色刷新】按钮继续下载依赖即可。
# 4. 调试 Spring Boot 示例
依赖下载完后,我们通过调试 Spring Boot 提供的示例,了解 Spring Boot 的**启动过程**。在 `spring-boot-smoke-tests` 项目下,我们可以看到大量的示例,如下图所示:
[![Spring Boot 示例](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/Spring Boot 示例.png)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/Spring Boot 示例.png)Spring Boot 示例
这里,我们使用 `spring-boot-smoke-test-tomcat` 项目,最为熟悉的 Spring MVC + Tomcat 的组合。
① 在 SampleTomcatApplication 和 SpringApplication 分别打上断点,如下图所示:
[![打上断点](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/打上断点.png)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/打上断点.png)打上断点
② Debug 运行 SampleTomcatApplication 类,首次构建会需要几秒钟,成功进入断点,可以愉快的调试 Spring Boot **启动过程**。如下图所示:
[![调试 Spring Boot](04-Spring Boot 源码分析-调试环境搭建Spring Boot 2.6.0 版本).assets/调试 Spring Boot.gif)](https://www.iocoder.cn/images/Spring-Boot/2021-01-02/调试 Spring Boot.gif)调试 Spring Boot
# 5. 源码解析
Spring Boot 的代码量,目前有 35w 行左右,不过绝大多数情况下,我们只要搞懂 Spring Boot 的启动流程,如何实现自动配置的原理,足够满足工作与面试了。
这里,艿艿来推荐下 Spring Boot 相关的源码解析的书籍,帮助大家更好的阅读。
① 艿艿写的 [《精尽 Spring Boot 源码解析》](http://svip.iocoder.cn/categories/Spring-Boot/),针对 Spring Boot 2.2.X 版本,工作中使用的主流版本。
如果大家在阅读中有碰到什么问题,欢迎星球给艿艿提问哈,大胆的,自己人!
② [《SpringBoot 源码解读与原理分析》](https://github.com/YunaiV/books),针对 Spring Boot 2.1.9 版本。
写的还行,内容也讲了一些 Spring IOC 和 AOP 相关的源码,细节上不够详细,可以选择看看。
③ [《Spring Boot 技术内幕》](https://github.com/YunaiV/books),针对 Spring Boot 2.X 版本,豆瓣暂无评分,预计评分在 6.5 左右。
> 链接: https://pan.baidu.com/s/19O9ShDQcbmFopr-Vym-OFQ 提取码: zay7 复制这段内容后打开百度网盘手机App操作更方便哦
这本书出的太晚,艿艿暂时还没细看,后续有时间准备瞅瞅~