一、Why
Spring Boot 在传统 Spring 框架的基础上做了创新和优化,将开发人员从以往烦琐的配置工作中解放出来,并提供了大量即插即用的集成化组件,从而解决了各种组件之间复杂的整合过程,大大提高了开发效率,降低了维护成本。
比如, 原本使用的是 Spring MVC 框架, 在整个开发过程中,除了需要编写一大堆配置文件、针对每个层次引入专门的开发组件外,还需要独立部署和管理应用服务器。最后,为了对系统的运行状态进行有效监控,还需要引入一些并不好用的外部框架。
而使用了 Spring Boot 框架,因为它直接解决了使配置 、 编程 、 部署 、 监控 ,好用、简单又高效。
越来越强大的 Spring Boot 俨然是 Java EE 领域的标准开发框架了。熟练掌握 Spring Boot 中的各项技术组件,并能够在一定程度上掌握其内部运行机制,是从事 Java 应用程序开发的基本要求,也是学习 Spring Cloud 等微服务开发框架的基础。
二、Spring 家族技术生态全景图
Spring 框架自 2003 年由 Rod Johnson 设计并实现以来,经历了多个重大版本的发展和演进,已经形成了一个庞大的家族式技术生态圈。目前,Spring 已经是 Java EE 领域最流行的开发框架,在全球各大企业中都得到了广泛应用。
让我们先来看一下 Spring 家族技术生态的全景图。
访问 下Spring 的官方网站 https://spring.io/

从图中可以看到,这里罗列了 Spring 框架的七大核心技术体系,分别是微服务架构、响应式编程、云原生、Web 应用、Serverless 架构、事件驱动以及批处理
这些技术体系各自独立但也有一定交集,例如微服务架构往往会与基于 Spring Cloud 的云原生技术结合在一起使用,而微服务架构的构建过程也需要依赖于能够提供 RESTful 风格的 Web 应用程序等。
另一方面,在具备特定的技术特点之外,这些技术体系也各有其应用场景。
举个例子
- 如果我们想要实现日常报表等轻量级的批处理任务,而又不想引入 Hadoop 这套庞大的离线处理平台时,使用基于 Spring Batch 的批处理框架是一个不错的选择
- 如果想要实现与 Kafka、RabbitMQ 等各种主流消息中间件之间的集成,屏蔽这些中间件在使用上的差别,那么使用基于 Spring Cloud Stream 的事件驱动架构对外提供了统一的 API, 屏蔽了内部各个中间件在实现上的差异性。
在日常开发过程中,如果构建单块 Web 服务,可以采用 Spring Boot。如果想要开发微服务架构,那么就需要使用基于 Spring Boot 的 Spring Cloud,而 Spring Cloud 同样内置了基于 Spring Cloud Stream 的事件驱动架构。
同时, 特别强调的是响应式编程技术。响应式编程是 Spring 5 引入的最大创新,代表了一种系统架构设计和实现的技术方向。因此,我们也将从 Spring Boot、Spring Cloud 以及 Spring 响应式编程这三个技术体系进行切入,看看 Spring 具体能够为我们解决开发过程中的哪些问题。
三、Spring Framework 的整体架构
当然,所有我们现在能看到的 Spring 家族技术体系都是在 Spring Framework 基础上逐步演进而来的。在介绍上述技术体系之前,我们先简单了解下 Spring Framework 的整体架构,如下图所示:
【4.x】

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

通过浏览 Spring 的官方网站,我们可以看到 Spring Boot 已经成为 Spring 中顶级的子项目。自 2014 年 4 月发布 1.0.0 版本以来,Spring Boot 俨然已经发展为 Java EE 领域开发 Web 应用程序的首选框架。
先来感受一下使用 Spring Boot 开发一个 RESTful风格 的 HTTP 端点所需要做的编码工作,如下所示:
@SpringBootApplication
@RestController
public class DemoApplication {
@GetMapping("/helloworld")
public String hello() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
7GFWBv6V"#YhY~h"7&3GG3F&'22V"c3#s#vf3#33FC&3S#CFFf36Sr#У7GFWBvgB#Y7&&K^X&6VByN[NyJz[&vV$fY(7&2Xk{~YKyJ8#У#8[#УKhYN{R7&&jni^[XnXKK{;8i[hzvV"iX8khh8{;{8{;{~8[NyJkX{N[nZjnik{XZ^yNXnihx~yJyNxiK"x8#У{Kb7&ZxiyInx+K{b7&&7&6VBY(7&Y8N[{zZJ~hiK{;8.KikY(hXK[z^X[~Y(niNX{xX[n[h
~8%3G&&&i{&2yNiK7&6VBY7&&i[Xi8N[{zXK>iihiyNXikY 8#7G&УjX[>Kf7&7&xiK{;yNih~z[K{NZIyX[57&xiK{;Xh^Z{J.zKK^XNih~zhn{~{XyNyX[>ih~z[ZJ~Z^YZIiJ |