说说SpringMVC、SpringBoot和SpringCloud三者之间的联系和区别
这个问题是我在参加一次面试晚会活动上被问到的一个问题,看标题显然很简单就能够回答出来,但是仔细一琢磨,平时蒙头苦干的我们可能缺少关注和积累,好像并不能用较专业的术语和逻辑很顺畅的表达出来,于是我简要的翻了翻资料,然后整理出了这篇文章。
Spring框架是一个大集合,也像一个大家族【可以到spring.io官网了解】。但家庭成员的基础都是基于Spring的IoC和AOP特性, IoC提供了依赖注入(DI)的容器,可谓是核心,AOP则提供了面向切面的编程方案,在前两者的基础上,继续演化升级实现了其他延伸产品的高级功能。
内容提要
Spring MVC是基于Servlet实现的一个前端MVC框架,主要解决WEB项目开发的问题。因为在业务开发的过程中发现Spring的配置非常复杂,各种XML、Config等处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。在业务日益繁杂和庞大的进程中,很多企业已经疲于应付庞大的业务模块和错综复杂的数据交互,于是微服务的理念开始提了出来,Spring根据这个理念打造出来微服务全家桶Spring Cloud,这其中有非常多高效的组件活跃在微服务生态中,微服务是基于Spring Boot进行开发的.
简单通俗地来理解就是:Spring最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件,大家觉得很好用,于是按照这种模式搞了一个MVC框架(一些用Spring解耦的组件)用于开发 web应用,这也就是我们熟悉的SpringMVC,然后又发现每次开发都写很多同样形式的代码现得很累赘,为了简化工作流程,就开发出了一些“懒人整合包”(starter)的模式,这套就是Spring Boot,后面项目越做越大交互越来约繁杂,大家已经在业务和运维的路上越走越疲惫了,于是业界就出现了微服务的概念,将不同的业务进行拆分,Spring基于此搞出了一套SpringCloud作为微服务的解决方案。
Spring MVC
Spring MVC是一个前端的MVC框架,它提供了一种轻度耦合的方式来开发Web应用,通过Dispatcher Servlet、ModelAndView以及View Resolver的联合使得Web应用开发变得更加容易。SpringMVC采用“请求-响应”的模型将Web层进行解耦,项目结构分层明显职责划分清晰,控制器负责接受请求、委派处理给其他Bean然后返回请求响应,通过Spring被注入的其他Bean则支持了具体的业务执行,然后以ModelAndView的方式返回响应内容。SpringMVC主要解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎和静态Web资源等等。
优点:SpringMVC简单但是灵活性强,框架易于扩展。
缺点:SpringMVC与Servlet耦合了,不能脱离容器独立运行;框架过于细分使得开发效率低。
Spring Boot
Spring Boot引入自动配置的概念,让项目设置变得很容易。Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。Spring Boot只是承载者,辅助开发者简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和Spring MVC的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。
通过官网的摘要我们也能够看出,SpringBoot提供服务单独运行的能力,而且内嵌容器如Tomcat、Jetty或者Undertow等,SpringBoot的项目在配置上做到了极简,通过spring自动配置让你解脱对项目配置依赖的过分关注,同时,SpringBoot的注解方式让我们从纷繁复杂的XML配置中彻底的解放了出来。
springboot 要解决的问题:
1、如何精简配置;如何让编码、部署、监控变简单;
2、如何方便的让spring生态圈和其他工具链整合。
优点:搭建项目简单,配合Maven看看文档就能够搭建出一个新的项目;配置简单高效,开发敏捷,部署便利。
缺点:因为简单所以屏蔽了背后复杂的实现,这让不熟悉Spring的开发者在后续问题的解决上变得困难。
Spring Cloud
Spring Cloud为分布式系统快速构建行业统一特征模式的应用提供了一个行之有效的解决工具箱,诸如配置管理、服务发现、熔断器、只能路由、微服务代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话以及集群状态等,通过各分布式微服务组件的实现以及协调使用,开发者能够快速构建出运行良好的服务。
显然,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud作为大管家需要管理好这些微服务,通过Spring Cloud官网我们可以看到有很多组件为微服务助力,使得这种微服务架构在服务众多之时也便于通讯、管理和维护。
优点:得益于SpringBoot的开发便利性,让微服务的实现变得简单可行;作为微服务解决方案,考虑全面并且方便使用基本上都是开箱即用;配置和使用都简单,只需要简单的配置即可实现复杂的功能。
缺点:因为微服务体系中涉及到众多的框架,加重了学习成本,同时为后期的运维带来了困难。
学习总结
Spring是一个“引擎”;
Spring MVC是基于Spring的一个MVC框架;
Spring Boot是基于Spring4的条件注册的一套快速开发整合包;
Spring Cloud是基于Spring Boot搭建的分布式微服务系统解决方案。
参考资料
1、http://www.cnblogs.com/zhonglihai/p/9109413.html
2、https://spring.io/projects
3、http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html
说说SpringMVC、SpringBoot和SpringCloud三者之间的联系和区别的更多相关文章
- Win32 Console Application、Win32 Application、MFC三者之间的联系和区别
转自:http://blog.csdn.net/c_base_jin/article/details/52304845 在windows编程中,我们或多或少都听说这三个名称,分别是Win32 Cons ...
- Git、GitHub、GitLab三者之间的联系以及区别
在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转) 1.什么是 Git? Git 是一个版本控制系统. 版本控制是一种用于记录一个或多个文件内容变化,方便 ...
- Git-GitHub-GitLab三者之间的联系及区别
在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转) 1.什么是 Git? Git 是一个版本控制系统. 版本控制是一种用于记录一个或多个文件内容变化,方便 ...
- JavaScript、TypeScript、ES6三者之间的联系和区别
ES6是什么 ECMAScript 6.0(以下简称ES6)是JavaScript语言(现在是遵循ES5标准)的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可以 ...
- spring springMvc spring-boot spring-cloud分别是什么
本文来源于:克己习礼成仁 的<spring springMvc spring-boot spring-cloud分别是什么> 什么是spring 关于spring的定义无论是从官方还是 ...
- Spring、SpringMVC、SpringBoot、SpringCloud的区别与联系
前言 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.Spring使你能够编写更干净.更可管理.并且更易于测试的代码. Spring MVC是Spring的一个模块,一个w ...
- [转帖]spring、springMvc、springBoot和springCloud的联系与区别
spring.springMvc.springBoot和springCloud的联系与区别 -- :: 尘光掠影 阅读数 文章标签: springspringmvcspringbootspringCl ...
- spring、springMvc、springBoot和springCloud的联系与区别
spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc) ...
- Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?
简单介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.Spring使你能够编写更干净.更可管理.并且更易于测试的代码. Spring MVC是Spring的一个模块,一 ...
随机推荐
- UVA-11374(最短路)
题意: 机场快线有经济线和商业线,现在分别给出经济线和商业线的的路线,现在只能坐一站商业线,其他坐经济线,问从起点到终点的最短用时是多少,还有路线是怎样的; 思路: 预处理出起点到所有站的最短距离和终 ...
- 【C/C++】函数指针
首先必须要清楚如下: [1]函数指针即函数的地址,也就是存储其机器语言代码的首地址.该地址用函数名表示. [2]用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数 ...
- java.io.FileNotFoundException:/mnt/sdcard/......(Permission denied)
今天在实现下载模块的时候,从服务器下载apk安装的时候总是不成功. 打开LogCat查看日志,发现在访问sdcard的时候出现Permission denied的情况. 百度之后发现原因是没有添加权限 ...
- [CTSC 2018] 混合果汁
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5343 [算法] 对于每组询问 , 首先二分答案 显然 , 最优策略为优先选择价格低的 ...
- js中this 的四种用法
this 在函数执行时,this 总是指向调用该函数的对象.要判断 this 的指向,其实就是判断 this 所在的函数属于谁. 在<javaScript语言精粹>这本书中,把 this ...
- Ubuntu 16.04 安装wine
1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安装wine sud ...
- Makefile的常用技术总结
一.MAKE中的自动变量: $@: 表示target的名字 $%: 仅当目标是函数库文件中,表示规则中的目标成员名.例如,如果一个目标是"foo.a(bar.o)",那 ...
- ubuntu下使用锐捷校园网
前言 以下内容是个人学习之后的感悟,转载请注明出处~ 1.首先下载锐捷Linux版本,然后解压缩后,有个rjsupplicant.sh这个脚本文件,于是按照README做了,终端中 ...
- P2P通讯初步实现
原文URL: http://www.cnblogs.com/dlwang2002/archive/2008/09/16/1291793.html 1:基于Socket连接: 2:在四个局域网内测试通过 ...
- c++的const总结(转)
为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...