Skip to content

Commit

Permalink
fix: format style
Browse files Browse the repository at this point in the history
  • Loading branch information
jint233 committed Sep 29, 2024
1 parent 8764f72 commit 8ac8a5a
Show file tree
Hide file tree
Showing 70 changed files with 2,617 additions and 2,719 deletions.
14 changes: 9 additions & 5 deletions docs/Spring/Spring Boot 实战开发/第00讲.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,21 @@

基于以上种种优势,Spring Boot 于 2015 年在国内开始走红,且越来越多的企业将 Spring Boot 作为系统开发的首选框架。比如我自己带领的几个团队中,无一例外在使用 Spring Boot 构建应用程序。

### 你为什么需要学习这门课程?
## 你为什么需要学习这门课程?

越来越强大的 Spring Boot 俨然是 Java EE 领域的标准开发框架了。因此,掌握 Spring Boot 成了 Java 工程师的必备技能,而熟练掌握 Spring Boot 中的各项技术组件,并能够在一定程度上掌握其内部运行机制,是你从事 Java 应用程序开发的基本要求,也是你将来学习 Spring Cloud 等微服务开发框架的基础。

我自己也有着多家大型互联网公司的从业经验,日常也经常面试来自不同公司的 Java 工程师,在面试过程中,我对开发人员的要求: **掌握 Spring Boot 已经不是一个加分项,而是一个必备技能。** 你也可以上拉勾网站查看相关岗位职责,基本都有这条限制,以下是我截取的两份 Java 开发工程师岗的招聘要求:

![Drawing 0.png](assets/Ciqc1F-7VTmAcByzAAGG1shcgSQ296.png) ![Drawing 1.png](assets/CgqCHl-7VT2ABxE5AABvwZSxw-k496.png)
![Drawing 0.png](assets/Ciqc1F-7VTmAcByzAAGG1shcgSQ296.png)

(职位信息来源:拉勾网) **可以说,深入了解并掌握 Spring Boot 是你成功进入大公司、斩获高薪 Offer 的一个重要砝码。**
![Drawing 1.png](assets/CgqCHl-7VT2ABxE5AABvwZSxw-k496.png)

### 这门课程是如何设计的?
(职位信息来源:拉勾网)

**可以说,深入了解并掌握 Spring Boot 是你成功进入大公司、斩获高薪 Offer 的一个重要砝码。**

## 这门课程是如何设计的?

虽然 Spring Boot 为我们提供了开发友好性,但很多人学习、应用 Spring Boot 的过程并不容易,我在实际开发过程中就曾亲身经历很多问题和挑战,而据我了解这也是大部分同学共同面对的境况。

Expand All @@ -47,7 +51,7 @@ Web 应用程序的拆分维度

此外,课程中所涉及的各个 Spring Boot 核心组件,我都会基于完整的案例分析给出详细的代码实现方案,方便你进行学习和改造。课程配套代码,你可以在 [https://github.com/lagoueduCol/SpringBoot-jianxiang](https://github.com/lagoueduCol/SpringBoot-jianxiang) 进行下载。

### 讲师寄语
## 讲师寄语

现如今,无论公司基于何种业务,也无论公司规模和人员如何,但凡涉及 Java EE 应用程序的开发,基本都会用到 Spring Boot 框架。Spring Boot 的应用越来越广泛,企业对于相关开发人员的需求量也越来越大,掌握 Spring Boot 框架已成为各大互联网公司高薪诚聘的基本岗位需求。

Expand Down
10 changes: 5 additions & 5 deletions docs/Spring/Spring Boot 实战开发/第01讲.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Spring 框架自 2003 年由 Rod Johnson 设计并实现以来,经历了多个

今天,我将通过一个课时的时间带领你梳理整个 Spring 家族中的技术体系,以及各种功能齐全的开发框架。让我们先来看一下 Spring 家族技术生态的全景图。

### Spring 家族技术生态全景图
## Spring 家族技术生态全景图

我们访问 Spring 的官方网站([https://spring.io/](https://spring.io/))来对这个框架做宏观的了解。在 Spring 的主页中,展示了下面这张图:

Expand Down Expand Up @@ -32,7 +32,7 @@ Spring 从诞生之初就被认为是一种容器,上图中的“核心容器

从开发语言上讲,虽然 Spring 应用最广泛的是在 Java EE 领域,但在当前的版本中,也支持 Kotlin、Groovy 以及各种动态开发语言。

### Spring Boot 与 Web 应用程序
## Spring Boot 与 Web 应用程序

Spring Boot 构建在 Spring Framework 基础之上,是新一代的 Web 应用程序开发框架。我们可以通过下面这张图来了解 Spring Boot 的全貌:

Expand Down Expand Up @@ -68,7 +68,7 @@ public class DemoApplication {

可以看到,Spring Boot 的上述功能实际上从多个维度简化了 Web 应用程序的开关过程,这些维度包含编码、配置、部署和监控等。在 02 讲中,我们将通过一个具体的案例来对每个维度给出更为详细的描述。

### Spring Cloud 与微服务架构
## Spring Cloud 与微服务架构

Spring Cloud 构建在 Spring Boot 基础之上,它的整体架构图如下所示:

Expand All @@ -84,7 +84,7 @@ Spring Cloud 核心功能组件

可以看到,基于 Spring Boot 的开发便利性,Spring Cloud 巧妙地简化了微服务系统基础设施的开发过程,Spring Cloud 包含上图中所展示的服务发现注册、API 网关、配置中心、消息总线、负载均衡、熔断器、数据监控等。

### Spring 5 与响应式编程
## Spring 5 与响应式编程

目前,Spring 已经演进到 5.X 版本。随着 Spring 5 的正式发布,我们迎来了响应式编程(Reactive Programming)的全新发展时期。Spring 5 中内嵌了与数据管理相关的响应式数据访问、与系统集成相关的响应式消息通信以及与 Web 服务相关的响应式 Web 框架等多种响应式组件,从而极大地简化了响应式应用程序的开发过程和开发难度。

Expand All @@ -104,6 +104,6 @@ Spring Cloud 核心功能组件

讲完 Spring 家族的技术体系,让我们回到课程。在 01 讲中,我们主要围绕 Spring Boot 框架展开讨论,分别从配置体系、数据访问、Web 服务、消息通信、系统安全、系统监控、应用测试等维度对该框架进行深入的剖析,所采用的版本为 2.2.X 版。

### 小结与预告
## 小结与预告

本课时系统分析了 Spring 家族的技术生态,并重点介绍了 Spring Boot、Spring Cloud 和 Spring 响应式编程这三大技术体系。从技术演进的过程和趋势而言,这些工具和框架的出现有其必然性。Spring Boot 是对传统 Spring MVC 的改进,Spring Cloud 基于 Spring Boot 构建微服务架构,而响应式编程则代表未来技术的发展方向。
28 changes: 14 additions & 14 deletions docs/Spring/Spring Boot 实战开发/第02讲.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

在 01 讲中,我们提到 Spring 家族具备很多款开源框架,开发人员可以基于这些开发框架实现各种 Spring 应用程序。在 02 讲中,我们无意对所有这些 Spring 应用程序的类型和开发方式过多展开,而是主要集中在基于 Spring Boot 开发面向 Web 场景的服务,这也是互联网应用程序最常见的表现形式。在介绍基于 Spring Boot 的开发模式之前,让我们先将它与传统的 Spring MVC 进行简单对比。

### Spring MVC VS Spring Boot
## Spring MVC VS Spring Boot

在典型的 Web 应用程序中,前后端通常采用基于 HTTP 协议完成请求和响应,开发过程中需要完成 URL 地址的映射、HTTP 请求的构建、数据的序列化和反序列化以及实现各个服务自身内部的业务逻辑,如下图所示:

Expand Down Expand Up @@ -40,7 +40,7 @@ Spring Boot部署包结构

最后,基于 Spring Boot 新提供的 Actuator 组件,开发和运维人员可以通过 RESTful 接口获取应用程序的当前运行时状态并对这些状态背后的度量指标进行监控和报警。例如可以通过“/env/{name}”端点获取系统环境变量、通过“/mapping”端点获取所有 RESTful 服务、通过“/dump”端点获取线程工作状态以及通过“/metrics/{name}”端点获取 JVM 性能指标等。

### 剖析一个 Spring Web 应用程序
## 剖析一个 Spring Web 应用程序

针对一个基于 Spring Boot 开发的 Web 应用程序,其代码组织方式需要遵循一定的项目结构。在 02 讲中,如果不做特殊说明,我们都将使用 Maven 来管理项目工程中的结构和包依赖。一个典型的 Web 应用程序的项目结构如下图所示:

Expand All @@ -50,7 +50,7 @@ Spring Boot Web 项目结构图

在上图中,有几个地方需要特别注意,我也在图中做了专门的标注,分别是包依赖、启动类、控制器类以及配置,让我们讲此部分内容分别做一些展开。

#### 包依赖
### 包依赖

Spring Boot 提供了一系列 starter 工程来简化各种组件之间的依赖关系。以开发 Web 服务为例,我们需要引入 spring-boot-starter-web 这个工程,而这个工程中并没有具体的代码,只是包含了一些 pom 依赖,如下所示:

Expand All @@ -71,16 +71,16 @@ Spring Boot 2.2.4 版本的包依赖示意图

在应用程序中引入 spring-boot-starter-web 组件就像引入一个普通的 Maven 依赖一样,如下所示。

```plaintext
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```

一旦 spring-boot-starter-web 组件引入完毕,我们就可以充分利用 Spring Boot 提供的自动配置机制开发 Web 应用程序。

#### 启动类
### 启动类

使用 Spring Boot 的最重要的一个步骤是创建一个 Bootstrap 启动类。Bootstrap 类结构简单且比较固化,如下所示:

Expand All @@ -97,7 +97,7 @@ public class HelloApplication {

显然,这里引入了一个全新的注解 @SpringBootApplication。在 Spring Boot 中,添加了该注解的类就是整个应用程序的入口,一方面会启动整个 Spring 容器,另一方面也会自动扫描代码包结构下的 @Component@Service@Repository@Controller 等注解并把这些注解对应的类转化为 Bean 对象全部加载到 Spring 容器中。

#### 控制器类
### 控制器类

Bootstrap 类为我们提供了 Spring Boot 应用程序的入口,相当于应用程序已经有了最基本的骨架。接下来我们就可以添加 HTTP 请求的访问入口,表现在 Spring Boot 中也就是一系列的 Controller 类。这里的 Controller 与 Spring MVC 中的 Controller 在概念上是一致的,一个典型的 Controller 类如下所示:

Expand All @@ -117,11 +117,11 @@ public class AccountController {

请注意,以上代码中包含了 @RestController@RequestMapping@GetMapping 这三个注解。其中,@RequestMapping 用于指定请求地址的映射关系,@GetMapping 的作用等同于指定了 GET 请求的 @RequestMapping 注解,而 @RestController 注解是传统 Spring MVC 中所提供的 @Controller 注解的升级版,相当于就是 @Controller@ResponseEntity 注解的结合体,会自动使用 JSON 实现序列化/反序列化操作。

#### 配置文件
### 配置文件

我们注意到,在 src/main/resources 目录下存在一个 application.yml 文件,这就是 Spring Boot 中的主配置文件。例如,我们可以将如下所示的端口、服务名称以及数据库访问等配置信息添加到这个配置文件中:

```plaintext
```properties
server:
port: 8081
spring:
Expand All @@ -136,13 +136,13 @@ spring:

事实上,Spring Boot 提供了强大的自动配置机制,如果没有特殊的配置需求,开发人员完全可以基于 Spring Boot 内置的配置体系完成诸如数据库访问相关配置信息的自动集成。

### 案例驱动:SpringCSS
## 案例驱动:SpringCSS

介绍完了基于 Spring Boot 创建一个 Web 应用的基本流程之后,我们将引出本课程的案例系统 SpringCSS,这里的 CSS 是对客户服务系统 Customer Service System 的简称。客服服务是电商、健康类业务场景中非常常见的一种业务场景,我们将通过构建一个精简但又完整的系统来展示 Spring Boot 相关设计理念和各项技术组件。

现实场景下的客户服务业务逻辑一般都非常复杂,而案例系统的目的在于演示技术实现过程,不在于介绍具体业务逻辑。所以,我们对案例的业务流程做了高度的简化,但涉及的各项技术都可以直接应用到日常开发过程中。

#### SpringCSS 整体架构
### SpringCSS 整体架构

在 SpringCSS 中,存在一个 customer-service,这是一个 Spring Boot 应用程序,也是整个案例系统中的主体服务。在该服务中,我们可以将采用经典的分层架构,即将服务分成 Web 层、Service 层和 Repository 层。

Expand All @@ -154,14 +154,14 @@ SpringCSS 系统的整体架构图

在上图中,引出了构建 SpringCSS 的多项技术组件,在后续课程中我们会对这些技术组件做专题介绍。

#### 从案例实战到原理剖析
### 从案例实战到原理剖析

更进一步,通过案例帮你完成基于 Spring Boot 框架构建 Web 应用程序是 02 讲的一大目标,但也不是唯一目标。作为扩展,希望我们通过对优秀开源框架的学习,掌握各个核心组件背后的运行机制,进而深入理解架构的实现原理。

在本专栏中,我们将通过熟悉源码,剖析 Spring Boot 中核心组件的工作原理,典型的场景包括 Spring Boot 的自动配置实现原理、数据库访问实现原理、HTTP 远程调用实现原理等。

通过源码级的深入剖析学习上述核心组件的实现原理时,你可以掌握系统架构设计和实现过程中的方法和技巧,并指导日常的开发工作。

### 小结与预告
## 小结与预告

案例分析是掌握一个框架应用方式的最好方法。本课程是一款以案例驱动的 Spring Boot 应用程序开发课程,今天我们主要针对一个典型的 Spring Boot Web 应用程序的组织结构和开发方式进行了详细介绍,并引出了贯穿整个课程体系的 SpringCSS 案例系统。
Loading

0 comments on commit 8ac8a5a

Please sign in to comment.