Spring Boot 2从入门到入坟 | 基础入门篇:Spring生态圈
发布日期:2021-06-30 17:57:14 浏览次数:2 分类:技术文章

本文共 8920 字,大约阅读时间需要 29 分钟。

Spring能做什么?

Spring的能力

首先,咱们来看一下Spring与Spring Boot它们之间的区别和联系,而且我们要学好Spring Boot,也应该对Spring的整个生态圈要有所了解。大家之前已经或多或少地学过Spring了,知道它有非常多的功能,比如IoC(做容器)、AOP(做切面),以及我们可以用Spring MVC来进行一个Web应用的开发等等,这些都是Spring框架给我们带来的基本功能。

当然,整个Spring到底能做什么,我们也可以来参照官网的解释。Spring的官网地址是https://spring.io/,我们不妨访问一下其官网,如下图所示。

在这里插入图片描述

看到这儿,官网说Spring到底能做什么,你是不是就一目了然了啊😂,下面我们来仔细说说Spring能做的事。

Microservices

就是我们说的微服务开发,也就是说我们现在随便开发一个应用,如果这个应用功能模块众多,那么未来它可能就会成长为一个大型应用,要是我们将所有的模块代码全写在一个项目里面,可想而知,这是非常不合适的,正确的做法是应该把整个应用的所有功能拆分成一个一个微小的功能模块,每一个微小的功能模块我们都可以称之为一个微服务,这时使用Spring,它就可以快速地帮我们创建和开发一个微服务了。

Reactive

Spring也可以来做响应式编程(Reactive)哟!响应式编程是基于异步非阻塞的方式,在整个应用之间构建出一个异步数据流,这个异步数据流允许我们占用服务器少量的线程资源、少量的CPU或者内存资源,就可以帮我们构建出一个高吞吐量的应用了。

说了这么多,你记住一句话就够了,响应式编程是使用异步数据流进行编程的

Cloud

Spring也可以来做分布式云开发哟!我们未来将一个大型应用全部拆分成一些微小模块以后,就会产生分布式应用了,对此,Spring也有相关的解决方案,即Spring Cloud。

Web apps

大家最常见的就是Spring用来做Web开发了,例如,我们可以使用Spring MVC来开发一个Web应用,当你发送一个请求之后,后台就会给你返回一个json数据或者响应一个页面了,这都是Spring框架给我们带来的基本功能。

Serverless

Spring现在也能适应目前非常流行的一个新概念,叫Serverless,即无服务开发。所谓的无服务简单来说就是function and sevices,即函数及服务,比如函数式服务。我们使用Spring就可以简单快速地开发一个函数式服务了,而且也勿须购买任何的服务器。

要是搁以前,我们还得要购买大量的几核几G的服务器,不仅浪费资源,而且闲的时候,那些服务器纯粹就闲置在那了,而现在我们就可以直接把函数式服务上到云平台,它到底占用多少资源,我们就可以按量计费或者时时计费了,这样,我们就可以节省很多人力、财力以及物力了。

Event Driven

Event Driven,我们称之为事件驱动。Spring可以通过基于事件驱动的方式为我们整个分布式系统构建出一个时时数据流(streaming data),有了这个时时数据流之后,我们就可以通过响应式编程的方式让整个系统占用少量的资源,以完成高吞吐量的业务了。

Batch

Spring也可以用来做批处理业务(Batch)哟!

其实,Spring的功能不局限于这么些哟,因为没有必要都一一列举出来,这儿只是列举出了它的几大特色功能而已。

Spring的生态圈

问题来了,以上这些功能都是Spring这一个框架来实现的吗?其实不是,我们将鼠标放在Spring官网顶部导航栏的Projects这一项上,你会发现整个Spring的生态圈其实是非常大的,有非常多的框架,其中就包括我们以前学过的Spring,这儿称之为Spring Framework,如下图所示。

在这里插入图片描述

所以,我们现在就得从宏观和微观这两个角度去理解Spring了。从宏观上来说,Spring指的是Spring帮我们构建出的整个生态圈,整个生态圈合作起来就能帮我们来干以上那么多事情了,当然,我也没有都一一列举出来,上面那些都是它的几大特色功能;从微观上来说,Spring指的就是我们常说的Spring框架了。

这里我们不妨来看了一下Spring的整个项目列表,点击以下Spring Boot项,如下图所示。

在这里插入图片描述

这时,你会发现Spring的生态圈其实很庞大,这块列出来的每一项都是一套解决方案。

在这里插入图片描述

比如我们将要学习的Spring Boot,而且我们未来微服务开发时,也要用到它,还有我们以前学过的Spring Framework,我们不妨点进来看一下,如下图所示。

在这里插入图片描述

可以看到我们之前学习过的Spring的一些核心机制,例如DI(依赖注入)、AOP、IoC以及使用Spring MVC进行Web开发等等。

还有Spring生态圈中用于解决数据访问的技术,无论是MySQL这些关系型数据库,还是Redis这些非关系型数据库,Spring都有整套的解决方案,它几乎囊括了市面上所有的数据访问技术。

在这里插入图片描述

还有Spring生态圈下的Spring Cloud框架,它是来帮我们解决分布式下的所有问题的。

在这里插入图片描述

还有Spring生态圈下的Spring Security框架,它是来帮我们解决整个应用的安全控制问题的。

在这里插入图片描述

还有Spring生态圈下的Spring Session框架,它是来帮我们解决分布式下各种Session的存储共享问题的。

在这里插入图片描述

我们会看到Spring生态圈下有一系列的框架,包括还有用于做批处理的Spring Batch、用于做消息队列的Spring AMQP、用于做安卓开发的Spring for Android、用于做移动设备开发的Spring Mobile以及用于做命令行程序的Spring Shell等等等等,可以这样说,每一个框架都是来解决其所对应的问题的,都是一套解决方案。

Spring正是基于以上这些项目,才帮我们构建出了一个大型的生态圈,这个生态圈覆盖了我们后来服务开发的基本所有的功能模块,即:

  • Web开发
  • 数据访问
  • 安全控制
  • 分布式
  • 消息服务
  • 移动开发
  • 批处理
  • ······

所以,只要大家全部掌握了整套Spring生态圈中的解决方案(框架),那可以说你就是所向披靡了,想要开发什么东西你都不会再害怕了。

其实,回头想想,我们要全部掌握Spring生态圈中的这么多的技术,这就有点类似于什么呢?是不是类似于这样啊,就是我们掌握了造CPU的技术、造内存的技术(相当于会了Spring Cloud)、造硬盘的技术(相当于会了Spring Session)以及造主板的技术(相当于会了Spring Integration)。但是,我们现在只想要一台电脑,那问题就来了,我们怎么把CPU、内存、硬盘以及主板等等快速组装成一台电脑呢?

在之前项目的开发过程中,相信大家肯定经常会陷入配置地狱中,是不是啊😭?大家还记得小时候学Spring框架的时候,整合MyBatis或者Spring MVC,是不是就得写一大堆一大堆的配置啊?光整合一个Spring MVC,就有一大堆,更别谈整合Spring生态圈中其他的解决方案(框架)了。所以,你会发现在应用开发的时候,一旦应用的功能多起来,那么配置上就会给我们带来非常大的麻烦。那谁能简化配置上的麻烦呢?很显然,那就是我们要学的Spring Boot了,简化配置就是Spring Boot与生俱来的意义。我们可以这么来说,Spring Boot其实是一个高层框架,其底层就是Spring Framework,那Spring Framework底层又是什么呢?如果非得来说的话,那就是Java了,对吧😀

总之一句话,Spring Boot可以帮我们整合Spring生态圈中的整个系列技术栈,以完成整个应用的开发。使用Spring Boot整合起来之后,我们以后就可以免于写那么多繁重的配置了,就能专心于我们的业务逻辑了。这就类似于,我们现在想要一台电脑,就不用费那么大劲自己手动组装一大堆了,而是直接找苹果或者华为买一个品牌机就行了,我们再也勿须自己掌握各种组装技术了。

Spring 5的重大升级

正是因为Spring 5有了重大升级,所以Spring Boot 2.x版本跟Spring Boot 1.x版本的使用又有了一些不一样。那么,Spring 5有了哪些重大升级呢?下面我来为大家详细介绍一下。

响应式编程

第一个重大升级是Spring 5引入了响应式编程。无论是访问数据库,例如访问MySQL这些关系型数据库,或者访问Redis这些非关系型数据库,还是Web开发,还是安全开发,包括兼容Servlet开发,这些都有另一套解决方案了,即响应式编程。

相应地,Spring Boot 2.x现在也引入了两套解决方案,第一套是以前原生的Servlet技术栈,就是以前的老一套,不用多说;第二套是从数据访问这一层开始,我们就通过构建异步数据流的方式来进行响应式开发,响应式开发数据访问、Web应用以及Security安全应用等,并最终构建出一个响应式的应用。该应用可以用少量的线程和资源就能处理我们大量的并发。

在这里插入图片描述

所以,我们的整个课程设计也是分为两季,在第一季中我们要掌握整个Servlet技术栈,在第二季中我们就要来掌握Reactive技术栈了。

以上响应式编程就是Spring 5给我们升级的第一个特性。

内部源码设计

Spring 5整个内部源码都是基于Java 8来进行实现的,而Java 8又更新了非常多重大的新特性,所以Spring 5重新设计了源码架构。

Java 8中更新的一个让人感觉变化最大的特性就是接口默认实现,有了接口默认实现之后,其实我们以前好多的设计模式,例如适配器模式,压根就用不着了。这里,我举个例子来说明一下吧,现在有一个接口A,它里面声明有如下5个方法。

public interface A {
public void method1(); public void method2(); public void method3(); public void method4(); public void method5();}

然后,我想写一个子类B,只实现其中的method1和method2方法,如下。

public class B implements A {
public void method1() {
// ... } public void method2() {
// ... }}

还想写一个子类C,只实现其中的method4和method5方法,如下。

public class C implements A {
public void method4() {
// ... } public void method5() {
// ... }}

也就是说,对于子类B来说,method3、method4和method5方法它是不用实现的,但是如果我们让子类B来实现接口A,那么method3、method4和method5方法就不得不来实现了,就算是空方法,你也不得不写出来。同理,让子类C来实现接口A,method1、method2和method3方法也不得不来实现了。而且,Spring底层也设计了非常多的接口,一个接口里面可能就声明了一两百个方法,当我们自定义一些组件时,难道要把这一两百个方法全部都实现吗?很显然,并不会,全部实现那是傻瓜才会干的蠢事,相反,Spring在底层会经常大量使用一种设计模式,即适配器模式,适配器模式相信大家都听过,就是让一个适配器(即Adaptor)把接口A中的所有方法全部一起进行默认实现,实现成为一个空方法。这时,对于子类B来说,只须继承适配器重写method1和method2方法即可,对于子类C来说,只须继承适配器重写method4和method4方法即可。

但是,Java 8一出来,有了接口的默认实现以后,适配器设计模式就用不上了,我们可以直接在接口A里面给出所有方法的一个默认实现,然后子类想要重写哪些方法就重写哪些方法就行了。所以,正是因为Java底层的变化,Spring 5就有了很多源码内部的一些架构设计上的变化,内部源码设计与之前的也就都不一样了。不过也别太担心,在这套系列课程中,我也会带领着大家将这些源码重新再来走一遍。

至此,我们差不多就了解完Spring的整个生态圈了,大家可以看到这个生态圈能帮我们做很多事情。

为什么用Spring Boot?

我们为什么要用Spring Boot呢?那这就得看一下官方对Spring Boot的介绍了,如下图所示。

在这里插入图片描述

官方说,Spring Boot会使得创建一个独立的、生产级别的基于Spring的应用变得更简单,我们要做的事情就是把这个应用运行起来。

我们几乎不用关心我们以前Spring要整合各种框架时的各种配置,直接使用Spring Boot就能将这些框架快速地使用起来。这么说来,Spring Boot其实就是一个整合一系列技术栈的框架。所以,总结来说,Spring Boot的作用就是帮助我们快速地创建出生产级别的Spring应用,让我们以后用Spring开发变得更简单。

说了这么对,那Spring Boot的优点有哪些呢?其实,Spring Boot的优点非常多,例如官方就给我们列举出了非常多的优点,如下图所示。

在这里插入图片描述

我对照着上面官方列出来的优点,来为大家逐条详细讲解一下。

Spring Boot的优点

创建独立Spring应用

Spring Boot的第一个优点就是能创建一个独立的Spring应用,也就是说我们用Spring Boot也能创建出Spring应用了,以后咱们就再也不需要创建原生的Spring应用了,而且也不用写那么一大堆的Spring配置文件了哟😘!

如果你的公司现在正在用原生的Spring进行开发,那么你完全替换成Spring Boot是没有任何问题的,不仅不会带来功能上的减少,而且还会带来功能上的增强。

内嵌Web服务器

Spring Boot的第二个优点就是它内嵌了很多的Web服务器,比如Tomcat、Jetty以及Undertow等,这些都是Servlet容器。

还记得以前我们开发一个Web应用,比如使用Spring、Spring MVC来开发一个Web应用,最终将这个应用打包成一个war包,并将其部署到Tomcat服务器上吗?相信你一定还记得。但是,这样子的话,我们的目标环境还得装Tomcat服务器,并且还得配置,这是不是挺麻烦啊?

而现在我们用Spring Boot来进行应用开发,即使目标环境没有Tomcat服务器那也没关系,因为我们创建的应用它里面已经自带服务器了,它都我们给集成好了,我们就再也不用手动安装了。这就像大家买品牌机一样,商家已经给你把操作系统都装上了,你也不用回去自个装操作系统了,直接使用就行。

自动starter依赖,简化构建配置

Spring Boot的第三个优点就是它提供了一些自动依赖来帮我们进行一些项目构建期间的配置,以简化构建配置。

自动依赖在Spring Boot里面被称之为starter,它又是解决我们以前的什么痛点呢?大家好好想一想,我们以前来开发Spring应用的时候,是不是就要整合Spring、Spring MVC、MyBatis等一大堆的框架啊,这时肯定就需要导入一大堆的jar包了,而且每一个jar包的版本,我们还得控制好,万一有哪一个版本出现问题了,那我们整个应用可能都难以跑起来。而现在我们有了Spring Boot之后,它直接就帮我们提供好了一些starter,starter亦可称之为启动器,此时,我们再想要开发一个Web应用,就不需要导入一大堆的jar包了,只需要导入一个依赖即可,即spring-boot-starter-web,我们称之为Web场景。这样的话,我们开发Web应用需要的所有依赖,例如与Spring MVC相关的、与JSON处理相关的以及Spring核心容器相关的一大堆依赖,它就给我们全部导入进来了,而且给我们也把版本控制好了,保证这些版本之间是能够协同合作的,那就再也不会出现版本冲突的问题了。

一句话,Spring Boot简化了依赖配置,你只需要导入一个Web场景就能完成整个应用的开发。

自动配置Spring以及第三方功能

Spring Boot的第四个优点就是可以帮我们自动配置Spring以及第三方功能,而这正是我们之前一直说的激动人心的功能。

如果用Spring Boot来进行开发,那么我们再也不用像以前Spring整合Spring MVC、MyBatis那样写一大堆配置了,而且每个配置你还得记清楚,有些同学可能会将这些配置直接保存到自己的电脑上,每次要开发项目时再粘贴过来,但是你不觉得这样做很麻烦吗?

而现在我们有了Spring Boot之后,那么它就能帮我们把以上这些配置全部自动配置好,其实,以上这些配置说到底基本上都是一个固定化配置,可能只需要额外的小小修改一下。当你用Spring Boot上手开发,创建好工程之后,直接去开发你的业务逻辑就行了,你可以什么都不用管。

一句话,Spring Boot帮我们自动配置好了Spring以及一些第三方功能,例如你想要连接Redis、MySQL,用上Spring Boot之后,你只需要告诉人家Redis、MySQL的数据库连接地址、账号以及密码啥的,剩下的你都不用配置,包括不用配置数据源,直接就能上手开发了。

提供生产级别的监控、健康检查及外部化配置

Spring Boot的第五个优点就是它能为我们提供生产级别的监控、健康检查以及外部化配置功能。

一个应用上线以后,你不能只着眼于开发,对运维来说,你的这个应用现在消耗了多大CPU、内存,以及应用是否健康,包括要修改应用的一些配置时,让运维应该怎么去改,关于这些运维都是应该要清楚地知道的。对于运维来说,是绝不可能再去用IDEA打开应用的一大堆代码只修改一个小小的配置,然后改完之后再去打包重新部署的。所以,Spring Boot就来帮我们解决了这个问题,它原生就自带了生产级别的监控和健康检查功能,我们几乎不用对咱们的应用做任何配置,运维人员就能监控到咱们应用的所有指标了,包括咱们应用内部的信息,即应用是否还健康。而且,运维人员要修改咱们应用的配置,他也不用打开源代码,在源代码位置进行修改了,而是只需要在外部创建一个什么配置文件,在配置文件中把配置改一改就行,这时咱们的应用就能自动应用到了,这就是Spring Boot提供的生产级别的外部化配置功能。

试着回想一下,我们以前用Spring来开发原生应用,想要做到这些是不是很难啊?

无代码生成、无需编写XML

Spring Boot以上这些优点,特别是自动化配置,是完全无代码生成,无需编写XML的。就拿自动化配置来说,Spring Boot在整合MyBatis时,它并不是说要把XML给我们生成出来,其实压根就没有任何的代码生成,而是基于Spring底层的自动装配和条件注入等等这些功能来完成的,我们后续也会为大家讲述这些功能。

所以,你现在该知道,我们是直接基于各种场景来开发的了吧!当Spring Boot发现我们这是在开发一个Web应用时,就帮我们把这个Web应用的所有东西都配置好了。要是你开发数据库应用,Spring Boot也会帮你把数据库所有的东西都配置好,并且不会额外生成任何代码。也就是说,当我们原生应用部署时,不会给我们生成一大堆乱七八糟的代码以占用更多的资源,而是没有任何的代码生成。一句话,我们抛弃了以前Spring编写大量XML配置的方式。

看完Spring Boot以上这些优点,是不是感觉非常诱人啊,那你还不快来积极的使用一下Spring Boot。如果你的公司还在用原生的Spring,那么我们非常推荐你转换为Spring Boot。

最后,我们不妨总结一下Spring Boot是什么。其一,Spring Boot是一个整合Spring整个生态圈的一站式框架,以后你想要使用Spring整个生态圈来开发你的应用,那么你只需要从Spring Boot开始入手就行了;其二,Spring Boot是一个简化Spring技术栈的快速开发脚手架,什么叫脚手架呢?就是帮我们搭建好所有的东西,让我们具备所有的基础功能,这样,我们只需要开发自己的业务就行了。

Spring Boot的缺点

大家说Spring Boot有没有缺点啊?有的哟😊!下面我们就来看一下它的缺点。

迭代快,需要时刻关注变化

Spring Boot第一个缺点就是人称版本帝,迭代更新特别快,我们经常需要关注它的一些小变化。其实,这个应该不能归纳为它的缺点,反而应该是它的一个优点,你想啊,它迭代升级快,说明它的社区活跃啊,也就是说它非常受人们认可,是不是这样的啊😀?

封装太深,内部原理复杂,不容易精通

Spring Boot第二个缺点就是它封装太深,内部原理复杂,不容易精通。由于Spring Boot的底层是Spring框架,你会发现你对Spring有多精通,你可能对Spring Boot才会有多精通。所以,Spring Boot层层封装到最后,我们要剖其析内部原理时,还是有一点复杂的。但是,无论怎么样,也不应该阻挡我们来学习Spring Boot的脚步,那么接下来就请开始你的Spring Boot学习之旅吧!

转载地址:https://liayun.blog.csdn.net/article/details/115734530 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring Boot 2从入门到入坟 | 基础入门篇:Hello World入门
下一篇:呕心沥血整理出的史上最简单的IntelliJ IDEA教程,快来看哟!

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月28日 08时13分53秒