作为 Java 开发者,我们经常会在项目中接触到 Spring Boot 和 Spring MVC 这两个框架。很多初学者容易混淆它们的定位和关系,甚至认为它们是相互替代的技术。本文将从框架本质、设计目标、使用场景等多个维度,深入解析 Spring Boot 与 Spring MVC 的区别与联系,帮助你更好地理解和运用这两个优秀的框架。
目录
[Spring MVC:专注于 Web 层的解决方案](#Spring MVC:专注于 Web 层的解决方案)
[Spring Boot:简化 Spring 应用开发的工具](#Spring Boot:简化 Spring 应用开发的工具)
[三、依赖关系:Spring Boot 包含 Spring MVC](#三、依赖关系:Spring Boot 包含 Spring MVC)
[1. 项目初始化](#1. 项目初始化)
[2. 配置文件](#2. 配置文件)
[3. 部署方式](#3. 部署方式)
一、框架本质与定位
首先需要明确的是:Spring MVC 是一个 Web 框架,而 Spring Boot 是一个快速开发框架,两者并非同一维度的概念。
Spring MVC:专注于 Web 层的解决方案
Spring MVC 是 Spring 框架的一部分,它是基于 MVC(Model-View-Controller)设计模式的 Web 框架,主要解决了 Web 应用中请求处理、参数绑定、视图渲染等问题。其核心功能包括:
- DispatcherServlet 作为前端控制器,统一处理所有请求
- 基于注解的请求映射(@RequestMapping、@GetMapping 等)
- 灵活的数据绑定与类型转换
- 强大的拦截器机制
- 多种视图技术支持(JSP、Thymeleaf、FreeMarker 等)
简单来说,Spring MVC 专注于 "如何处理 HTTP 请求",是构建 Web 应用的基础框架。
Spring Boot:简化 Spring 应用开发的工具
Spring Boot 则是在 Spring 框架基础上发展而来的快速开发工具,它的核心目标是简化 Spring 应用的初始化、配置和部署过程。Spring Boot 本身并不提供新的功能,而是通过 "约定优于配置" 的理念,整合了 Spring 生态中的各种组件(包括 Spring MVC),并提供了以下核心特性:
- 自动配置(Auto-configuration):根据类路径中的依赖自动配置 Spring 应用
- 起步依赖(Starter dependencies):将常用依赖打包,简化依赖管理
- 嵌入式服务器:内置 Tomcat、Jetty 等服务器,无需单独部署
- Actuator:提供应用监控和管理功能
- 无需 XML 配置:完全基于注解和 Java 配置
二、核心区别对比

三、依赖关系:Spring Boot 包含 Spring MVC
在实际开发中,Spring Boot 与 Spring MVC 通常是一起使用 的。当我们在 Spring Boot 项目中引入 spring-boot-starter-web
依赖时,实际上已经包含了 Spring MVC 以及相关的 Web 组件:
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这个起步依赖中包含了:
- Spring MVC 核心组件
- 嵌入式 Tomcat 服务器
- Spring Web 相关工具类
- JSON 处理库(Jackson)
也就是说,Spring Boot 可以看作是 Spring MVC 的 "增强开发环境",它让 Spring MVC 的使用变得更加简单。
四、实际开发中的差异体现
1. 项目初始化
Spring MVC 项目:
- 需要手动创建目录结构
- 手动配置 web.xml 或 DispatcherServlet
- 手动添加各种依赖并解决版本冲突
- 配置视图解析器、拦截器等组件
Spring Boot 项目:
- 通过 Spring Initializr 一键生成项目结构
- 无需 XML 配置,通过注解即可完成配置
- 起步依赖自动管理所有依赖
- 内置服务器,无需额外配置
2. 配置文件
Spring MVC 典型配置(需要定义 DispatcherServlet):
java
<!-- web.xml 中配置 DispatcherServlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Spring Boot 对应配置 :
无需任何 XML 配置,只需创建一个主类:
java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3. 部署方式
Spring MVC:
- 需要打包为 WAR 文件
- 部署到外部 Tomcat 等服务器
- 需要手动配置服务器参数
Spring Boot:
-
可以打包为 JAR 文件(包含嵌入式服务器)
-
直接通过
java -jar
命令运行 -
支持命令行参数配置服务器端口等信息
bash# 运行 Spring Boot 应用 java -jar myapp.jar --server.port=8081
五、如何选择?
-
新项目开发:优先选择 Spring Boot
- 开发效率更高,配置简单
- 内置服务器,部署方便
- 自动管理依赖,减少版本冲突
-
维护旧项目:可能需要继续使用 Spring MVC
- 很多 legacy 系统仍基于纯 Spring MVC 构建
- 迁移到 Spring Boot 需要一定成本
-
特殊需求场景:
- 如果需要高度定制化的 Web 层配置,Spring MVC 更灵活
- 如果追求快速开发和部署,Spring Boot 是更好的选择
六、总结
Spring MVC 和 Spring Boot 并非对立关系,而是互补的技术:
-
Spring MVC 是 Web 开发的基础,解决了请求处理的核心问题
-
Spring Boot 是开发工具,简化了 Spring 应用(包括 Spring MVC)的构建过程
-
理解这一点,有助于我们在实际开发中更好地运用它们的优势:用 Spring MVC 构建清晰的 Web 层架构,用 Spring Boot 简化整个应用的开发和部署流程。
随着 Spring 生态的发展,Spring Boot 已经成为主流的开发方式,但深入理解 Spring MVC 的工作原理,依然是成为优秀 Java 开发者的重要基础。