Java 面试题:Spring,Spring MVC,Spring Boot 之间什么关系?

来,先和我看张图:

Spring全家桶了为了解决不同场景的问题,逐渐演化出多套生态环框,如:Spring、SpringMVC、SpringBoot、SpringCloud。

Spring MVC和Spring Boot都属于Spring,Spring MVC是基于Spring的一个 MVC 框架,而Spring Boot是基于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搭建的分布式微服务系统解决方案。

简略版Java学习路线图:

(下方链接点开直接进入课程当中)

入门: Java SE基础 → Java Web(含数据库+H5+js+vue)

中级: Maven → Git → SSM框架 → MybatisPlus → Spring Boot→ 《传智健康》项目实战 → 《瑞吉外卖》项目实战

进阶: Spring Cloud(微服务开发,学这一套就够了) 也可以按照以下技术点学:
Dubbo → Zookeeper → RabbitMQ → RocketMQ → Docker → Redis → MongoDB → 搜索技术Elasticsearch → MySQL进阶

项目: 《SaaSiHRM》企业服务 → 《好客租房》生活服务 → 权限管理一体化解决方案 → 短信网关平台

面试: Java大厂面试专题课 → Java百度地图

以上技术,足以支撑大家找到一份好的Java开发工作,如果想工作后再提升,页面底部还有30+套课程。

工作后可以再学习提升的技术:

JDK8-15新特性 → 编程强化 → 数据库强化 → 安全框架SpringSecurity → 报表技术 → 模板引擎VelocityTools → 工作流Activiti7……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353526.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot配置文件中的明文密码漏洞

目录 一、背景 二、本地修复测试 1、maven中引入jasypt 2、编写加密解密工具类 3、修改配置文件,增加秘钥 4、秘钥放在启动项 三、生产实现 1、升级打包代码 2、生产yml修改明文密码处 3、修改启动命令 一、背景 最近接收到网安的系统安全…

高德地图添加遮罩,实现圈出某个特定的地区

实现效果 一、准备 1、注册账号并申请Key 2、准备页面 <script type"text/javascript" src"https://webapi.amap.com/maps?v1.4.15&key您申请的key值"></script> <div id"container"></div>#container {widt…

vue 高德地图贴地点

效果图 引入高德api maps和local local 用的2.0.0的 其他版本可能会有不兼容问题 mounted(){//设置 地图this.map new AMap.Map(container, {mapStyle: , // 设置地图的自定义样式-深色zoom: 7.3, //级别center: [119.1, 36.32], //中心点坐标viewMode: 3D, // 地图模式resiz…

iOS 跳转到地图后导航(高德地图,百度地图,腾讯地图,苹果手机原生的地图)

1.现在info.plist里面如下图所示添加 2.在下图输入框中输入地名&#xff0c;然后点击前往目的地会出现如下图所示。&#xff08;如果你不知道地方名如何转化为经纬度请看我的另一篇博客&#xff1a;http://blog.csdn.net/chenyongkai1/article/details/51891135&#xff09; 3.…

高德导航免费,那他靠什么收入?

来源 &#xff5c;一口Linux 一位工作了12年的软件工程师说&#xff1a;当你打开导航时&#xff0c;不需要任何费用&#xff0c;还会给高德公司带来丰厚的收入。当时我不信&#xff0c;去查了相关资料后&#xff0c;才知道这个行业不简单。 出门外出&#xff0c;对路线不熟时&a…

C++编译一些常见的错误集锦

1、段错误&#xff08;Segmentation Fault&#xff09; &#xff08;1&#xff09;段错误&#xff08;Segmentation Fault&#xff09;是一种常见的计算机程序错误&#xff0c;通常指向程序试图访问的内存地址超出了程序可访问的内存范围&#xff0c;或者指针指向了无效的内存…

分布式光伏发电远程监控系统

分布式光伏发电远程监控系统 项目背景 新能源、可再生能源接入电网是智能电网建设的重要组成&#xff0c;也是能源互联网发展的基础。近年来&#xff0c;太阳能光伏发电技术快速发展&#xff0c;光伏发电并网对配电网的影响也不断加深。电网调度人员需要人工参与光伏发电站的发…

短视频矩阵源码技术开发

短视频矩阵是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中&#xff0c;我们将介绍短视频矩阵的原理和实现&#xff0c;并提供示例代码。 $where_time array(); // 时间 $where_time[] array(name>fbr…

运用正则表达式匹配QQ邮箱

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.首先创建一个新文件夹 1.命名好名字后用Visual Studio Code打开 创建一个HTML文档用&#xff01;字符按下tab键后完成基本格式 创建一个input标签占位符写下请输入QQ邮箱再给他一个id方便调用 …

html5form表单提交到QQ邮箱,javaMai+Springl实现给QQ邮箱发邮件(带附件,html格式)...

以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码) 和 2.使用Spring实现邮件的发送(含测试,注释,源码) 就在今天,遇到的需求是给一个QQ邮箱发一份邮件,刚看到需求一看…

Linux向qq邮箱发送html表格以及遇到的问题

由于是实验&#xff0c;做的比较简陋&#xff0c;邮箱直接显示html界面&#xff0c;有诸多要求&#xff0c;本人对html不太擅长&#xff0c;详情可以参考http://www.ruanyifeng.com/blog/2013/06/html_email.html linux向qq发送邮件参考另一篇博客&#xff1a; https://blog.cs…

PGP加密解密QQ邮箱邮件

今天学习了PGP加密解密QQ邮箱邮件的方法&#xff0c;分享一下&#x1f601;&#x1f601;&#x1f601;&#x1f601; 涉及软件&#xff1a;PGP(PGP Desktop)、Outlook(office的) 加密&#xff1a; 第一步&#xff1a;安装PGP软件&#x1f602;&#x1f602;&#x1f602; 具体…

qq邮箱发html版式是乱的,为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀...

为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀, 为什么在Word里编辑好的…

ipad查看qq邮箱收件服务器,ipad怎么设置qq邮箱以便通过iPad来接收QQ邮箱收到的邮件...

大家可以通过下文来了解&#xff0c;小编将会演示ipad怎么设置qq邮箱&#xff0c;设置成功之后我们就能通过iPad来接收QQ邮箱收到的邮件&#xff0c;快来操作吧~ 下文是以iPhone设置QQ邮箱为例&#xff0c;和iPad步骤是一样的哦&#xff0c;首先进入“Mail”&#xff0c;点击“…

SpringCloud Gateway网关多路由配置访问404解决方案

文章目录 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c;Not Found二、解决方案:1、 配置 filters: - StripPrefix12、删除冲突依赖3、检查启动类4、检查配置文件 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c…

这才叫软件测试工程师,你那最多是混口饭吃罢了....

前些天和大学室友小聚了一下&#xff0c;喝酒喝大发了&#xff0c;谈天谈地谈人生理想&#xff0c;也谈到了我们各自的发展&#xff0c;感触颇多。曾经找工作我迷茫过、徘徊不&#xff0c;毕业那会我屡屡面试失败&#xff0c;处处碰壁&#xff1b;工作两年后我一度想要升职加薪…

QQ截图快捷键设置

1、打开qq找到主菜单找到设置 2、找到热键----------点击设置热键 3、双击捕捉屏幕进行设置快捷键 然后就OK了。

C#高仿腾讯QQ截图程序

最近把以前制作的截图程序重新写了一下 动了一个大手术 高质量仿照的TX的截图程序 源码下载1(2012-12-09) http://download.csdn.net/detail/crystal_lz/4863320 源码下载2(2012-12-15) http://download.csdn.net/download/crystal_lz/4889763 新改版见&#xff1a;http:/…

【2022-10-19】让Mac QQ自带截图软件单独运行 / 节省大量系统内存 / 快捷截图 / ScreenCapture QQ/ QQ jietu plugin

相信用过Window QQ自带的截图工具的朋友&#xff0c;都会说一句&#xff1a;”真TM好用&#xff01;“&#xff0c;同样Mac QQ也自带了这样一款截图工具&#xff0c;但肯定没Window下这么好用&#xff0c;但是在Mac上应该也是数一数二的&#xff0c;我看了下界面&#xff0c;跟…

QQ截图工具截取

邮箱截图插件 TXGYMailCamera.dll(X86) Export: CameraWindow CameraSubArea CameraWindowLikeSpy 调用参数&#xff1a; rundll32 TXGYMailCamera.dll CameraWindow 微信截图插件 PrScrn.dll(X86) Export: PrScrn 调用参数&#xff1a; rundll32 PrScrn.dll PrScrn 下载地址&…