Monday, June 28, 2021

精尽Spring Boot源码分析

该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读

Spring Boot 版本:2.2.x

最好对 Spring 源码有一定的了解,可以先查看我的 《死磕 Spring 之 IoC 篇 - 文章导读》 系列文章

如果该篇内容对您有帮助,麻烦点击一下"推荐",也可以关注博主,感激不尽~

序言

前面一系列的文章对 MyBatis、Spring MVC、Spring IoC、Spring AOP 和 Spring TX 的源码进行了比较详细的分析,不知道各位小伙伴看了多少内容。我想,学习源码是一个比较枯燥乏味的过程,需要静下心来学习,你也许会感觉学不到什么,所以会有多少小伙伴认真看这种文章呢?不管怎样,还是希望文章对你有帮助。🐶 我呢,还是本着学习与分享的目的,继续我的知识分享,希望能够一直坚持下去。

现如今,Spring BootSpring Cloud 在许多中大型企业中被普及,Java Configuration 成为了主流,Spring Boot 的源码,揭开它神秘的面纱。

如果你对 Spring 的源码有比较充分的了解,那么阅读 Spring Boot 的源码会比较轻松,我花了一周左右时间,应该看得差不多了😄 所以对于 Spring 源码不熟悉的小伙伴,如果有兴趣的话,可以先去看看我前面的一系列文章。

接下来 Spring Boot 系列文章主要分为以下几个部分:

  • 调试环境的搭建与项目结构概述
  • Spring Boot 应用打成 jar 包的启动实现
  • Spring Boot 的 SpringApplication 启动类的启动过程
  • Spring Boot 内嵌 Tomcat 容器的实现
  • Spring Boot 支持外部 Tomcat 容器的实现
  • @SpringBootApplication 注解的实现原理,也就是 Spring Boot 的 @EnableAutoConfiguration 自动配置模块驱动注解的实现原理
  • Spring Boot 对于 Condition 接口的扩展
  • Spring Boot 的配置加载 - ConfigFileApplicationListener
  • Spring Boot 的日志系统 - LoggingApplicationListener
  • Spring Boot 的 @ConfigurationProperties 注解的实现

接下来我们先把 Spring Boot 的调试环境搭建好

依赖工具

  • Maven 3.6.3
  • Git
  • JDK 1.8+
  • IntelliJ IDEA 2020.1.1

笔者目前使用的是 Windows 系统,如果使用的是系统版本是 MAC OS 或者其他 IDEA 版本,可能会遇到相关问题,需自行 Google 处理。

源码拉取

从 Spring Boot 的 Git 仓库 Fork 项目到自己的 Git 仓库,方便我们在阅读源码的过程中,可添加相应的注释后提交代码。分支建议选择 2.2.x 作为默认分支,因为这个分支使用 Maven 管理依赖包(后续新的版本都是 Gradle),大多数人还是更加熟悉 Maven,所以笔者选择了 2.2.x 这个分支进行源码阅读。

当然,也可以直接拉取我的 Spring Boot 源码分析 GitHub 地址 进行阅读,根据我添加的注释结合我的文章进行阅读,体验更佳。

由于 Spring Boot 项目比较大,从仓库中拉取代码的时间会比较长,因为 Build 过程需要下载非常多的依赖,请耐心等待。

可能遇到的问题

  1. 在根目录的 pom. 看到 ${disable.checks} 报错,可以添加一个配置,禁用 Maven 代码检查,如下:

    <properties> <revision>2.2.14.BUILD-SNAPSHOT</revision> <main.basedir>${basedir}</main.basedir> <!-- 禁用 Maven 代码检查 --> <disable.checks>true</disable.checks></properties>
  2. 对整个工程进行编译的过程中出现 rabbit 相关包没有权限拉取的错误,可修改根目录 pom. 的 rabbit-milestone 仓库配置,如下:

    <repository> <id>rabbit-milestone</id> <name>Rabbit Milestone</name> <!-- https://dl.bintray.com/rabbitmq/maven-milestones --> <url>https://repos.spark-packages.org</url> <snapshots>  <enabled>false</enabled> </snapshots></repository>
  3. 如果编译的过程中还出现 Cannot resolve 的错误,可以试着将自己的私有仓库注释掉,使用阿里云的 Maven 仓库。

项目结构概览

整个 spring-boot 工程项目结构如下:

spring-boot---- spring-boot-project-------- spring-boot-------- spring-boot-actuator-------- spring-boot-actuator-autoconfigure-------- spring-boot-autoconfigure-------- spring-boot-cli-------- spring-boot-dependencies-------- spring-boot-devtools-------- spring-boot-docs-------- spring-boot-parent-------- spring-boot-properties-migrator-------- spring-boot-starters-------- spring-boot-test-------- spring-boot-test-autoconfigure-------- spring-boot-tools-------- pom.

各个子模块的描述:

spring-boot-tests:项目的测试类

spring-boot-project:整个 Spring Boot 项目的实现,包含了许多个子模块,如下:

  1. spring-boot(核心):Spring Boot 的核心实现,根据包名可以知道哪些功能是在哪些包下实现的

  2. spring-boot-autoconfigure(核心):Spring Boot 自动配置的实现,也就是在 Spring 中很多需要通过 自动配置,简化 Spring 应用

  3. spring-boot-starters(核心):提供许多常用组件的 Starter 模块,没有相关 Java 代码,仅仅是一个 pom. 文件,里面引入组件的相关依赖,帮助我们快速引入组件并使用;通常一个 Spring Boot Starter 需要结合 autoconfigure 自动配置一起引入,这样就能够快速启动

  4. spring-boot-test:提供单元测试的支持

  5. spring-boot-test-autoconfigure:提供单元测试的自动配置功能

  6. spring-boot-tools:Spring Boot 提供的工具箱

    例如其中的 spring-boot-maven-plugin 子模块可以帮助我们将自己的项目打成一个 jar 包,还有一个 spring-boot......

    原文转载:http://www.shaoqun.com/a/836006.html

    跨境电商:https://www.ikjzd.com/

    terapeak:https://www.ikjzd.com/w/556

    houzz:https://www.ikjzd.com/w/236

    olive:https://www.ikjzd.com/w/2025


    该系列文章是笔者在学习SpringBoot过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释SpringBoot源码分析GitHub地址进行阅读SpringBoot版本:2.2.x最好对Spring源码有一定的了解,可以先查看我的《死磕Spring之IoC篇-文章导读》系列文章如果该篇内容对您有帮助,麻烦点击一下"推荐",也可以关注博主,感激不尽~序言前面一系列的文章对M
    拍拍:https://www.ikjzd.com/w/2205
    亚马逊选品:需要考虑哪些重要要素:https://www.ikjzd.com/articles/97651
    亚马逊ACoS,卖家做到多少值是最好的?:https://www.ikjzd.com/articles/97652
    VAT与远程销售阈值、泛欧计划、无标签库存计划的关系!:https://www.ikjzd.com/articles/97656
    从没有做过电商,了解后才知道亚马逊无货源模式可以如此简单?:https://www.ikjzd.com/articles/97658
    女人最喜欢被㖭的是地方 喜欢让同学㖭我下面的感觉:http://lady.shaoqun.com/a/248367.html
    口述:我和良家妇女火热的婚外关系(4/4):http://lady.shaoqun.com/a/38731.html
    张柏芝自曝拍艳照原因 大爆陈冠希另类癖好:http://www.30bags.com/m/a/249579.html
    大批亚马逊卖家库容骤降,出货量严重下滑:https://www.ikjzd.com/articles/146166
    卖家苦差评久矣?亚马逊新功能可联系买家删除差评:https://www.ikjzd.com/articles/146163
    Shopee转化率如何提升?提升Shopee转化率要做些什么?:https://www.ikjzd.com/articles/146157
    冷知识?很脏:http://lady.shaoqun.com/a/391570.html

No comments:

Post a Comment