- N +

Spring SpringMVC SpringBoot SpringCloud概念、关系及区别

Spring SpringMVC SpringBoot SpringCloud概念、关系及区别原标题:Spring SpringMVC SpringBoot SpringCloud概念、关系及区别

导读:

前言今天我们来聊的是Spring家族的几个标志性框架 Spring SpringMVC SpringBoot SpringCloud的概念、关系及区别。为什么聊它呢?是因为Sp...

文章目录 [+]

前言



今天我们来聊的是Spring家族的几个标志性框架 Spring SpringMVC SpringBoot SpringCloud的概念、关系及区别。为什么聊它呢?是因为Spring的这些框架是现在开发技术选型的主流,且发展多年一直被程序员们所喜爱。它的框架也体现着技术发展的新趋势。(不了解Spring家族的框架都不好意思说是自己是一枚java从业者^_^)首先从Spring Core说起。


Spring家族



1、Spring (Core)

我们说到Spring,一般指代的是SpringFramework,它是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,为coding者提供了一个简易的开发方式。


Spring的核心特性思想之一IOC,它实现了容器对Bean对象的管理、降低组件耦合,使各层服务解耦。其实现原理可参考之前的文章。


Spring的另一个核心特性就是AOP,面向切面编程。面向切面编程需要将程序逻辑分解为称为所谓关注点的不同部分。跨越应用程序多个点的功能称为跨领域问题,这些跨领域问题在概念上与应用程序的业务逻辑分离。有许多常见的例子,如日志记录,声明式事务,安全性,缓存等。


如果说IOC依赖注入可以帮助我们将应用程序对象相互分离,那么AOP可以帮助我们将交叉问题与它们所影响的对象分离。二者目的都是使服务解耦,使开发简易。

当然,除了Spring 的两大核心功能,还有如下这些,如:

  • Spring JDBC

  • Spring MVC

  • Spring ORM·    

  • Spring JMS

  • Spring Test

其实不通过Spring框架依然可以实现这些功能特定,但是Spring 提供了更优雅的抽象接口以方便对这些功能的组装,同时又给予每个具体实现以灵活的配置;另外,基于Spring,你可以方便的与其他框架进行集成,如hibernate,ibatis等。Spring官方的原则是绝不重复造轮子,有好的解决方案只需要通过Spring进行集成即可。纵览Spring的结构,你会发现SpringFramework 本身并未提供太多具体的功能,它主要专注于让你的项目代码组织更加优雅,使其具有极好的灵活性和扩展性,同时又能通过Spring集成业界优秀的解决方案。


2、SpringMVC

Spring与MVC可以更好地解释什么是springMVC,MVC为现代web项目开发的一种很常见的模式,简言之C(控制器)将V(视图、用户客户端)与M(模块,业务)分开构成了MVC ,业内常见的MVC模式的开发框架有Struts。


Spring MVC是Spring的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个MVC框架(一些用Spring解耦的组件),主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过DispatcherServlet, ModelAndView 和View Resolver,让应用开发变得很容易。

 

3、SpringBoot

SpringBoot是一套整合了框架的框架。


它的初衷:解决Spring框架配置文件的繁琐、搭建服务的复杂性。


它的设计理念:约定优于配置(convention over configuration)。

基于此理念实现了自动配置(自动配置原理待写 ^_^),且降低项目搭建的复杂度。

 

搭建一个接口服务,通过SpringBoot几行代码即可实现。基于Spring Boot,不是说原来的配置没有了,而是Spring Boot有一套默认配置,我们可以把它看做比较通用的约定,而Spring Boot遵循的是约定优于配置原则,同时,如果你需要使用到Spring以往提供的各种复杂但功能强大的配置功能,Spring Boot一样支持。


在Spring Boot中,你会发现引入的所有包都是starter形式,如:

  • spring-boot-starter-web-services,针对SOAP Web Services

  • spring-boot-starter-web,针对Web应用与网络接口

  • spring-boot-starter-jdbc,针对JDBC

  • spring-boot-starter-cache,针对缓存支持

等等

 

Spring Boot官方对starter的解释如下:

Starters是一系列极其方便的依赖描述,通过在你的项目中包含这些starter,你可以一站式获得你所需要的服务,而无需像以往那样copy各种示例配置及代码,然后调试,真正做到开箱即用;比如你想使用Spring JPA进行数据操作,只需要在你的项目依赖中引入spring-boot-starter-data-jpa即可。


Spring、SpringMVC、SpringBoot三者的关系图



SpringCore主要有IOC 和 AOP两大特性,在此基础上衍生出了SpringMVC,SpringJDBC等组件,SpringBoot又依附于这两层。所以其依赖关系: Spring > SpringMVC > SpringBoot


4、Spring Cloud

最后我们来看一下 Spring Cloud ,虽然它带有“Cloud”,但是它并不是针对云计算的解决方案,而是在 Spring Boot 基础上构建的,用于快速构建分布式系统的通用模式的工具集。


使用 Spring Cloud 开发的应用程序非常适合在 Docker 或者 PaaS 上部署,所以又叫云原生应用。云原生可以简单理解为面向云环境的软件架构。


 Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,基于约定大于配置原则,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。


微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元, Spring Cloud就是这些微服务的大管家,采用了微服务风格架构之后,项目的数量会非常多, Spring Cloud做为大管家就需要提供各种方案来维护整个生态。专注于提供良好的开箱即用体验,并提供可扩展机制。


Spring Cloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯、熔断、监控等。因此就需要很多的组件来支持一套功能。


Spring Cloud集成相关优质项目

https://springcloud.cc/

可以看到Netflix贡献了不少服务组件,主要有 Zuul,Eureka、Hystrix等,地位仅次于Spring。


Spring Cloud核心成员

a、Netflix Zuul

Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul是用JAVA语言开发的网关。用作WEB网关,作为服务的入口,会集成鉴权、限流、熔断、负载均衡等功能。Zuul1.0是同步阻塞模式发布较早,也较成熟,所以应用比较广。Zuul2.0是异步非阻塞模式,由于Netflix发布一直跳票,所以Spring发布了自己的网关 Spring Cloud Gateway(异步非阻塞模型)。

 

b、Netflix Ribbon

提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。消费端负载均衡,服务清单实例在消费端,消费端进行负载均衡算法分配访问实例。

 

c、Netflix Eureka

服务注册中心,云端服务发现,一个基于REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。它是一个关键服务,消费端发现服务、和生产端注册服务都需要访问服务注册中心,是连接消费端和生产端的枢纽。

 

d、Netflix Hystrix

熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。它关注于服务治理方面,支持Fail-Fast、托底数据容错,保证集群服务的可用性和用户的体验。


e、Spring Cloud Config

配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。目标统一管理配置。


Spring Cloud其它成员

以上提到的是搭建一个分布式集群服务常见的几个核心组件,当然搭建一个强大的分布式集群还需要其它组件,如:SpringCloud Bus(消息总线)、Spring Cloud Sleuth(日志收集工具包)等。


SpringBoot 和 SpringCloud区别

基于SpringCloud一个简单的分布式系统架构图



每个microsercices、API Gateway、Service registry 均是一个SpringBoot风格的微服务,SpringCloud是一系列框架的集合。


Spring官方首页图  Spring: the source for modern java



通过这张图可以看出:SpringBoot专注于构建服务、而SpringCloud专注于协同管理服务。


四者的关系



其实写到这里,很多读者应该已经清楚,这四者专注的领域不同,解决的问题也不一样;总的来说,Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;


Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性地推出了Spring Boot,它遵循约定优于配置,极大降低了Spring使用门槛,但又不失Spring原本灵活强大的功能。


Spring Boot是 Spring的一套快速配置脚手架,可以基于 Spring Boot快速开发单个微服务, Spring Boot专注于快速、方便集成的单个微服务个体。可以把一个SpringBoot的服务看作是一个领域的微服务。但实际的大项目中,涉及多个领域(用户领域、订单领域、支付领域等),这时分解为多个微服务,最终需要这些微服务组合起来完成功能,且保证服务的高可用性。那么Spring Cloud就是这些微服务的大管家。


 Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。Spring Cloud关注全局的服务治理框架、它本身不会提供具体功能性的操作,更专注于服务之间的通讯、熔断、监控等。



小结



Spring(Core) 是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。

Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的一个 MVC 框架。

Spring Boot 是基于Spring的一套快速开发整合包,更专注于构建服务。

Spring Cloud是搭建分布式系统所需的一系列框架的有序集合,更专注于协同管理服务。

本文标题:Spring SpringMVC SpringBoot SpringCloud概念、关系及区别
本文链接:https://www.kyjszj.com/htzq/355.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共342人参与)参与讨论

    还没有评论,来说两句吧...