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

来源:xiaqo.com

前言


今天我们来聊的是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集成相关优质项目

可以看到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是搭建分布式系统所需的一系列框架的有序集合,更专注于协同管理服务。

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值