最近总有刚学 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 处理:

  1. 前端发请求 → Tomcat(Boot 内置)接收 → 交给 DispatcherServlet(Spring MVC 核心)

  2. DispatcherServlet 根据注解找到对应的 Controller 方法 → 执行方法返回结果

  3. 结果通过 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 用起来又笨又慢。

常见误区
  1. “学 SpringBoot 不用学 Spring MVC”?
    错!如果不懂 Spring MVC 的核心(比如请求映射、参数绑定、拦截器),你写 SpringBoot 接口时,遇到参数接收失败、返回格式不对、拦截器不生效等问题,根本不知道咋排查。
    比如:@RequestBody 接收不到 JSON 参数,问题出在 Spring MVC 的消息转换器,不是 SpringBoot 的问题。

  2. “SpringBoot 只包含 Spring MVC”?
    错!SpringBoot 能封装的远不止 MVC,还能封装 Spring Data JPA、MyBatis、Redis 等所有 Spring 生态组件,核心都是“自动配置”,MVC 只是它最常用的一个场景。

  3. “Spring MVC 已经过时了”?
    错!截止到 SpringBoot 3.x,核心 Web 处理还是靠 Spring MVC(除非你特意用 WebFlux 替代),它是 Spring 生态 Web 开发的基石,永远不过时。

新手该怎么学?

不用纠结先学哪个,按这个顺序来,效率最高:

  1. 先学 Spring MVC 核心:掌握 @Controller/@RequestMapping、参数绑定、拦截器、异常处理(不用配复杂环境,用 SpringBoot 项目练就行);

  2. 再学 SpringBoot 自动配置:搞懂 @SpringBootApplication 为啥能自动配 MVC、怎么改默认配置(比如改端口、改 MVC 拦截器);

  3. 最后结合实战:用 SpringBoot + Spring MVC 写完整接口,理解“配置简化”和“核心逻辑”的分工。

写在最后

其实搞懂两者的关系,核心就记住两句话:

  • Spring MVC 是“干活的”,负责 Web 请求处理;

  • SpringBoot 是“管后勤的”,负责把干活的环境搭好。

下一期我会讲:如何在 SpringBoot 里自定义 Spring MVC 配置(比如加拦截器、改消息转换器),让你不仅会用,还会“定制”。

如果这篇文章帮你理清了思路,麻烦点个赞、在看,关注我,后续还有更多 SpringBoot 干货,从入门到实战,一步步带你吃透~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐