详解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 来置微服务应用。

相关文章
|
17天前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
39 2
|
17天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
39 1
|
17天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
14 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
17天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
16 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
22天前
|
Java 编译器 Spring
Spring AOP 和 AspectJ 的区别
Spring AOP和AspectJ AOP都是面向切面编程(AOP)的实现,但它们在实现方式、灵活性、依赖性、性能和使用场景等方面存在显著区别。‌
43 2
|
21天前
|
负载均衡 网络协议 Java
浅谈Springboot与Springcloud的区别
浅谈Springboot与Springcloud的区别
27 1
|
17天前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
59 0
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
105 1
|
19天前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
Springcloud Alibaba + jdk17+nacos 项目实践

热门文章

最新文章