史上最清晰:SpringBoot 与 Spring MVC 关系彻底讲透
最近总有刚学 Spring 全家桶的朋友问我:“SpringBoot 和 Spring MVC 到底啥关系?是不是学了 SpringBoot 就不用学 Spring MVC 了?”
先搞懂各自是干啥的?
咱们先抛开“框架”“组件”这些高大上的词,用日常场景类比:
- Spring MVC
:就是个“专门处理 Web 请求的办事员”。
不管是前端发的 GET/POST 请求,还是参数接收、返回 JSON 数据、页面跳转,都是它的活儿。没有它,你的 Spring 项目想做 Web 开发,得自己写一堆处理请求的代码,又麻烦又容易错。
但它有个毛病:光有这个“办事员”还不够,你得给它搭“办公环境”——配 Tomcat、配 DispatcherServlet、配视图解析器,还要写一堆 XML 配置,新手光配环境就得耗半天。 - SpringBoot
:就是个“一站式管家”。
它不抢 Spring MVC 的活儿,而是帮你把 Spring MVC 运行需要的所有环境、配置都搞定:自动配 Tomcat、自动配 Spring MVC 核心组件、自动扫描控制器,你只需要写业务代码,不用管任何配置。
简单说:SpringBoot 是“懒人神器”,核心是自动配置;Spring MVC 是“Web 核心干活的”,核心是处理请求。
关键结论:SpringBoot ≠ 替代 Spring MVC,而是“封装+增强”
很多新手误以为 SpringBoot 是 Spring MVC 的升级版,其实完全错了!
我用代码和项目结构给你验证,一看就懂:
实操验证1:新建 SpringBoot 项目,看看依赖里有啥
咱们用 Spring Initializr 新建项目时,只要勾选了「Spring Web」依赖,打开 pom.xml 会发现:
1
2<dependency>
3<groupId>org.springframework.bootgroupId>
4<artifactId>spring-boot-starter-webartifactId>
5dependency>
点进这个依赖会发现,它里面包含了:
-
spring-webmvc(核心:Spring MVC 所有核心类,比如 DispatcherServlet)
-
spring-web(Spring Web 基础工具)
-
tomcat-embed-core(内置 Tomcat,不用手动装)
说白了:SpringBoot 的 spring-boot-starter-web 依赖,就是把 Spring MVC + Tomcat 打包好了给你用,你不用自己一个个引依赖,也不用配版本,Boot 都帮你搞定。
实操验证2:SpringBoot 项目里,Spring MVC 照样在干活
咱们上一篇写的 /hello 接口,核心代码是:
1@RestController
2publicclassHelloController{
3@GetMapping("/hello")
4publicStringsayHello(){
5return"Hello SpringBoot!";
6}
7}
这里的 @RestController、@GetMapping 都是 Spring MVC 的注解,不是 SpringBoot 的!
当你启动 SpringBoot 项目时,Boot 会自动初始化 Spring MVC 的核心组件 DispatcherServlet(请求分发器),所有请求还是靠 Spring MVC 处理:
-
前端发请求 → Tomcat(Boot 内置)接收 → 交给 DispatcherServlet(Spring MVC 核心)
-
DispatcherServlet 根据注解找到对应的 Controller 方法 → 执行方法返回结果
-
结果通过 Spring MVC 的消息转换器,转成 JSON/字符串返回给前端
整个过程,SpringBoot 只做了一件事:帮你自动启动 Tomcat、自动创建 DispatcherServlet,没参与任何请求处理的核心逻辑。
为啥有了 Spring MVC,还要用 SpringBoot?
用一个表格说清楚,对比“纯 Spring MVC 项目”和“SpringBoot + Spring MVC 项目”:
|
维度 |
纯 Spring MVC 项目 |
SpringBoot + Spring MVC 项目 |
|---|---|---|
|
依赖管理 |
手动引 spring-webmvc、tomcat 等,还要配版本 |
只引 spring-boot-starter-web,版本由 Boot 统一管理 |
|
配置文件 |
要写 web.xml、spring-mvc.xml 等 |
零配置,Boot 自动配好所有核心组件 |
|
启动方式 |
打包成 war 包,放到 Tomcat 里启动 |
直接运行 jar 包,内置 Tomcat 一键启动 |
|
开发效率 |
配置耗时>编码耗时 |
编码耗时>配置耗时(新手友好) |
一句话总结:SpringBoot 是脚手架,Spring MVC 是脚手架上的核心零件;没有 Spring MVC,SpringBoot 的 Web 功能就是空壳;没有 SpringBoot,Spring MVC 用起来又笨又慢。
常见误区
-
“学 SpringBoot 不用学 Spring MVC”?
错!如果不懂 Spring MVC 的核心(比如请求映射、参数绑定、拦截器),你写 SpringBoot 接口时,遇到参数接收失败、返回格式不对、拦截器不生效等问题,根本不知道咋排查。
比如:@RequestBody接收不到 JSON 参数,问题出在 Spring MVC 的消息转换器,不是 SpringBoot 的问题。 -
“SpringBoot 只包含 Spring MVC”?
错!SpringBoot 能封装的远不止 MVC,还能封装 Spring Data JPA、MyBatis、Redis 等所有 Spring 生态组件,核心都是“自动配置”,MVC 只是它最常用的一个场景。 -
“Spring MVC 已经过时了”?
错!截止到 SpringBoot 3.x,核心 Web 处理还是靠 Spring MVC(除非你特意用 WebFlux 替代),它是 Spring 生态 Web 开发的基石,永远不过时。
新手该怎么学?
不用纠结先学哪个,按这个顺序来,效率最高:
-
先学 Spring MVC 核心:掌握
@Controller/@RequestMapping、参数绑定、拦截器、异常处理(不用配复杂环境,用 SpringBoot 项目练就行); -
再学 SpringBoot 自动配置:搞懂
@SpringBootApplication为啥能自动配 MVC、怎么改默认配置(比如改端口、改 MVC 拦截器); -
最后结合实战:用 SpringBoot + Spring MVC 写完整接口,理解“配置简化”和“核心逻辑”的分工。
写在最后
其实搞懂两者的关系,核心就记住两句话:
-
Spring MVC 是“干活的”,负责 Web 请求处理;
-
SpringBoot 是“管后勤的”,负责把干活的环境搭好。
下一期我会讲:如何在 SpringBoot 里自定义 Spring MVC 配置(比如加拦截器、改消息转换器),让你不仅会用,还会“定制”。
如果这篇文章帮你理清了思路,麻烦点个赞、在看,关注我,后续还有更多 SpringBoot 干货,从入门到实战,一步步带你吃透~
更多推荐


所有评论(0)