SpringBoot - Spring 家族的技术体系_springboot 生态图-程序员宅基地

技术标签: spring boot  【Spring Boot2.X】  

在这里插入图片描述


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);

    }

}

一个经典的“Hello World”程序,而且使用 Spring Boot 来构建这样一个支持 RESTful 风格的 Web 应用程序只需要几秒钟。

一旦创建了一个 Spring Boot 应用程序,并添加类似上面的 DemoApplication 类,我们就可以启动 Spring Boot 内置的 Web 服务器并监听 8080 端口,剩余的一切工作 Spring Boot 都帮你自动完成了。


支持运行期内嵌容器(传统 Web 容器& 非阻塞式容器)

Spring Boot 具备了传统 Spring 框架所不具备的功能特性,即支持运行期内嵌容器(包含 Tomcat、Jetty 等支持 Servlet 规范的多款传统 Web 容器)

在最新的 Spring Boot 2.X 版本中,还提供了对 Netty 以及集成 Servlet 3.1+ 的非阻塞式容器的支持。基于运行期内嵌容器机制

开发人员想要启动Web 服务只需要使用一行 java –jar 命令就可以了。


在这里插入图片描述

自动配置

我们还发现 Spring Boot 的核心功能就是自动配置

我们可以看到 Spring Boot 并没有像以前使用 Spring MVC 一样需要指定一大堆关于 HTTP 请求和响应的 XML 配置。

事实上,Spring Boot 的运行过程同样还是依赖于 Spring MVC,但是它把原本需要开发人员指定的各种配置项设置了默认值,并内置在了运行时环境中,例如默认的服务器端口就是 8080,如果我们不需要对这些配置项有定制化需求,就可以不做任何的处理,采用既定的开发约定即可。这就是 Spring Boot 所倡导的约定优于配置(Convention over Configuration)设计理念

在这里插入图片描述


内置的监控机制

另外,相较传统的 Spring 框架,Spring Boot 的一大亮点是引入了内置的监控机制,这是通过 Actuator 组件(常见的包括内存信息、JVM 信息、垃圾回收信息等)来实现的。基于 Actuator 组件,一方面我们可以查看包含自动配置在内的应用程序详细信息,另一方面可以实时监控该应用程序的运行时健康状态。

在这里插入图片描述

可以看到,Spring Boot 的上述功能实际上从多个维度简化了 Web 应用程序的开关过程,这些维度包含编码、配置、部署和监控等。


Spring Cloud (Netflix)与微服务架构

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

在这里插入图片描述
技术组件的完备性是 Spring Cloud 框架的主要优势,它集成了业界一大批知名的微服务开发组件。Spring Cloud 的核心组件如下图所示

在这里插入图片描述

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


Spring 5 与响应式编程

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

下图展示了响应式编程的技术栈与传统的 Servlet 技术栈之间的对比:

在这里插入图片描述
从上图可以看到,上图左侧为基于 Spring WebFlux 的技术栈,右侧为基于 Spring MVC 的技术栈。我们知道传统的 Spring MVC 构建在 Java EE 的 Servlet 标准之上,该标准本身就是阻塞式和同步的,而 Spring WebFlux 基于响应式流,因此可以用来构建异步非阻塞的服务

在 Spring 5 中,选取了 Project Reactor 作为响应式流的实现库。由于响应式编程的特性,Spring WebFlux 和 Project Reactor 的运行需要依赖于诸如 Netty 和 Undertow 等支持异步机制的容器。同时我们也可以选择使用较新版本的 Tomcat 和 Jetty 作为运行环境,因为它们支持异步 I/O 的 Servlet 3.1

下图更加明显地展示了 Spring MVC 和 Spring WebFlux 之间的区别和联系:

在这里插入图片描述
在基于 Spring Boot 以及 Spring Cloud 的应用程序中,Spring WebFlux 和 Spring MVC 可以混合进行使用。


小结

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

系统分析了 Spring 家族的技术生态,并重点介绍了 Spring Boot、Spring Cloud 和 Spring 响应式编程这三大技术体系。从技术演进的过程和趋势而言,这些工具和框架的出现有其必然性。Spring Boot 是对传统 Spring MVC 的改进,Spring Cloud 基于 Spring Boot 构建微服务架构,而响应式编程则代表未来技术的发展方向。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yangshangwei/article/details/116867722

智能推荐

【系统生物学】利用XPPAUT求解SOD系统-程序员宅基地

文章浏览阅读1k次,点赞4次,收藏5次。SOD是指超氧化物歧化酶(Superoxide Dismutase),是一种抗氧化酶,它可以将细胞内产生的超氧自由基转化为过氧化氢和氧分子。超氧自由基是一种高度反应性的分子,它们可以与细胞内的其他分子发生反应,导致细胞损伤和炎症等问题。因此,SOD在维持细胞健康方面起着重要作用。SOD通常包括多个亚型,如Cu/Zn-SOD、Mn-SOD和Fe-SOD等。这些亚型在不同的组织和环境中发挥不同的作用。例如,Cu/Zn-SOD主要存在于细胞质中,而Mn-SOD则主要存在于线粒体中。_xppaut

maven配置环境变量提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件_maven 提示'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。-程序员宅基地

文章浏览阅读1.1k次。配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件首先maven环境变量:变量名:MAVEN_HOME变量值:E:\apache-maven-3.2.3变量名:Path变量值:;%MAVEN_HOME%\bincmd控制台查看查看maven是否配置成功1:查看maven安装路径:echo %MAVEN_HOME%_maven 提示'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

java之安全技术_java信息安全技术是什么-程序员宅基地

文章浏览阅读425次。加密单向加密MD5不多说了,全称Message Digest Algorithm 5,信息摘要算法SHA全称secure hash algorithm 安全散列算法HMAChash message authentication code 散列消息鉴别码,根据hash算法的认证协议。HMAC的认证原理是,使用一个密钥生成一 个固定大小的小数据块,即MAC,并将其加入消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。经常用于对API参数进行请求验证:分配给授权调用方一个_java信息安全技术是什么

winhex 比较详细的图文使用教程_winhex怎么备份扇区-程序员宅基地

文章浏览阅读9.6k次,点赞8次,收藏43次。数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就是硬盘本身没有物理损伤,而是由于人为或者病毒破坏所造成的数据丢失(比如误格式化,误分区),那么这样的数据恢复就叫软恢复..._winhex怎么备份扇区

数据提取方法_a', {'text': '下一章'}-程序员宅基地

文章浏览阅读474次。html和xml的区别html(超文本标记语言),用来显示数据xml(可扩展标记语言),用来传输和存储数据xpath语法// 的用途//a当前html页面上的所有的abookstore//bookbookstore下的所有book元素@的使用//a/@herf所有a的hreftext()的使用//a/text()获取所有的a下的文本text()的使用//a/text()获取所有的a下的文本//a[text()=下一页]获取文本为下一页的a标签_a', {'text': '下一章'}

vmware 安装macos_虚拟机macos登录apple id发生未知错误-程序员宅基地

文章浏览阅读225次。虚拟机安装MacOS10.14教程https://mp.weixin.qq.com/s/91Qc7L7E0xbVYXUcReUb_w升级10.15分辨率解决https://blog.csdn.net/weixin_43825552/article/details/86763378https://www.cnblogs.com/sunylat/p/6414697.html优化https..._虚拟机macos登录apple id发生未知错误

随便推点

毕设项目分享 人脸识别系统-程序员宅基地

文章浏览阅读533次,点赞21次,收藏13次。今天学长向大家介绍一个机器视觉的毕设项目,基于深度学习的人脸识别系统毕业设计 opencv人脸识别系统。

Python对txt文档进行读,写,追加,修改操作(open,pandas,numpy)_open txt文件续写-程序员宅基地

文章浏览阅读1k次。Python对txt文档进行读,写,追加,修改操作上次写了一篇Python对csv文档进行读,写,追加操作,这次写一篇关于txt的操作。本文将使用open,pandas,numpy三种方式对txt文档进行读,写,追加,在此不推荐使用此方式操作 f = open(’test.txt’, ‘w’),因为该方法结束时候需要使用f.close(),如果忘记写close,则可能出现数据丢失的情况1.with open()方式读:with open("test.txt","r") as f: ._open txt文件续写

用cmd登录mysql怎么避免看见密码_命令行登录防止MySQL密码泄露的几个小妙招。...-程序员宅基地

文章浏览阅读418次。命令行登录防止MySQL密码泄露的几个小妙招。明知山有虎偏向虎山行的方案:1、可以通过如下环境变量强制Linux不记录敏感历史命令在命令行执行HISTCONTROL=ignorespace后,再输入带密码的命令的前面加一个空格登录,登录命令不会被记录到历史记录里。[root@oldboy~]# HISTCONTROL=ignorespace#<==这里是临时生效,要想永久生效,请放入/etc..._如何忽略mysql数据库在命令行使用密码不安全

安装与管理硬件设备_安装与管理硬件装备-程序员宅基地

文章浏览阅读1.4k次。 声明:此文章为个人读书笔记,仅记些重要的内容备忘,无盗版之意。更多相关内容请查看《Windows Vista使用详解》。严禁转载!第5章: 安装与管理硬件设备 安装驱动程序 管理硬件设备 禁止安装特定的设备 笔记:什么是驱动程序签名?驱动程序的数字签名工作是由微软WHQL(Windows Hardware Quality Labs,Win_安装与管理硬件装备

【18】从0到1教你写uC/OS-III————>时基列表_if(remain <= p_tcb2->tickremain)-程序员宅基地

文章浏览阅读360次。简述: 所有的实时系统都需要一个能提供周期性时间的时间源,叫做时基周期或系统周期; 当时基任务执行时,它会遍历队列中所有等待期满的任务、等待事件超时的任务; 时基任务会就绪时基列表中的那些期满、超时的任务; 时基列表中包含了一个表OSCfg_TickWheel[]和一个计数器OSTickCtr; 这个表由OS_CFG_TICK_WHELL_SIZE记录,记录数取决于处理器的RAM..._if(remain <= p_tcb2->tickremain)

AO3421-VB一款P—Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明-程序员宅基地

文章浏览阅读324次,点赞10次,收藏7次。其在 SOT23 封装下,具有较低的开关电阻和高的额定电流,适用于需要高性能功率开关的电路设计。2. **电池管理系统:** 在需要 P—Channel MOSFET 的电池管理系统中,AO3421-VB 可以用于电池充放电控制等方面。1. **电源模块:** 由于 AO3421-VB 具有较低的开关电阻和适当的电流承受能力,可以用于电源模块中的功率开关电路。3. **DC-DC 变换器:** 适用于需要高效率的 DC-DC 变换器设计,提供电源转换功能。- 阈值电压: Vth = -1V。

推荐文章

热门文章

相关标签