详解Spring、SpringBoot、SpringCloud三者的联系与区别

简介: 详解Spring、SpringBoot、SpringCloud三者的联系与区别

一、Spring

Spring 是一个轻量级的Java 开发框架,主要依存于SSM 框架,即Spring MVC + Spring + Mybatis,定位很明确,Spring MVC主要负责view 层的显示,Spring 利用IOC 和AOP 来处理业务,Mybatis则是数据的持久化到数据库。


46.png


而Spring 为了开发Java 应用程序提供了全面的基础架构支持。 它具有以下几个特点。


非侵入式

所谓非侵入式是指Spring 框架的API 不会出现在业务逻辑上,也就是说业务逻辑应该是干净的,不会出现与业务逻辑无关的程序。 针对应用而言,这样才能将业务逻辑从目前应用中剥离出来,进一步在其他的应用中实现重用; 针对框架而言,由于业务逻辑中没有Spring 的API,所以业务逻辑也可以从Spring 框架快速移植到其他框架。


容器

Spring 提供了容器功能,容器可以管理对象的生命周期以及对象与对象之间的依赖关系,可以写一个配置文件定义对象的名称、是否单例以及设定与其他物件的依赖关系,当容器启动后,这些物件就被建立好实体了,可以直接注入使用。


IOC 控制反转

控制反转是一种编程的方式,即依赖关系的转移,如果以前都是依赖于实现,那么现在反转为依赖于抽象,核心思想就在于面对界面编程。


依赖注入

对象与对象之间依赖关系的实现,包括接口注入,建构注入等。


AOP 剖面编程

将记录文件、安全、交易管理等功能想象成一个剖面,原先这些功能都是直接写在业务逻辑中,但它有两个缺点,首先就是业务逻辑不干净,其次就是这些功能被很多业务逻辑重复使用,不能做到重用。 AOP 就解决了上述问题,可以把这些功能从业务逻辑中拨离出来形成一个剖面,可以实现重用。


二、Spring Boot

设计目的

Spring Boot 的设计目的是为了解决 Spring 各版本设定工作过于繁重的问题,简化初始架设流程、降低开发难度,使开发人员只需要专注在应用程序的开发,而无须过多关注 XML 的配置。


设计理念

Spring Boot 的设计理念为约定大于配置(Convention Over Configuration),为此提供了很多已经整合好的依赖套件,以便开发人员在开发应用程序时能做到不用或者很少的Spring 配置就可以让项目快速执行,这样的好处就是开发人员可以把更多的精力放在业务逻辑的开发上。


优点


使用简单

Spring Boot 可使用注释的方式实现类别的定义与功能的开发,即可无程序产生和 XML 设置。 而且Spring Boot 会根据类别路径中的JAR 包,为JAR 包中的类别自动配置Bean,这样可以大量减少我们要使用的配置,当然Spring Boot 只考虑大部分开发状况,若实际开发中我们需要配置Bean 也可以自定义配置。


配置简单

Spring Boot 为了简化Maven 配置设定提供了大量的Starter,开发人员只要能配置好相对应组件参数,Spring Boot 就会自动配置,让开发人员能快速搭建依赖于Spring 组件的Java 项目,例如,Spring Boot 为了帮助开发人员快速启动一个web 容器, 提供了spring-boot-starter-web 依赖,只需要在pom.xml 档案中新增web 依赖即可。

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

而点选进入web 依赖后可以发现,spring-boot-starter-web 已经包含了多个依赖,包括在Spring 中需要汇入的依赖,如下图展示一部分依赖。

<!-- 忽略其他依賴 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.7.RELEASE</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.7.RELEASE</version>
    <scope>compile</scope>
</dependency>

部署简单

Spring Boot 内嵌了各种Servlet 容器、Tomcat、Jetty 等,不再需要打包成war 包部署到容器中,我们只需要将项目打包成Jar 包,所有的依赖包都在一个Jar 包内,使用java -jar xxx.jar 即可启动项目。


监控简单

Spring Boot 提供了spring-boot-starter-actuator 依赖,它是一套监控、管理应用程序状态的功能模块,包含监控应用程序的线程信息、内存信息等。


缺点

虽然Spring Boot 上手很容易,大部分东西都自动配置,简化了许多架设流程,但也因此需要非常了解Spring Boot 的核心技术原理,需要对配置信息非常熟悉,不然一旦遇到问题就很棘手,要找问题也不是很容易。


三、Spring Cloud

Spring Cloud 是基于 Spring Boot 的一整套实现微服务的框架,它是一套分布式服务治理架构,本身不提供实际功能性的操作,只专注于服务之间的通讯、熔断和监控等,因此需要很多原件来共同支持一套功能。


四、三者的关系

从上述介绍可以看出,Spring Boot 其实是依赖于Spring 的,并不是一个全新的架构,Spring Boot 就是 Spring 的自动化,而 Spring Cloud 通过依赖 Spring Boot 来置微服务应用。

相关文章
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
176 37
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
Java Spring
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
|
2月前
|
Java Spring 容器
【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM
【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM
|
2月前
|
存储 Java Spring
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
|
2月前
|
SQL Java 数据库连接
【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI
【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI
|
2月前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
2月前
|
NoSQL Java Redis
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
|
2月前
|
Java Spring
【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
|
10天前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
下一篇
无影云桌面