Spring Boot 和 Spring MVC 是 Spring 生态中两个不同层级的组件,Spring MVC 是 Spring 框架的 Web 模块,而 Spring Boot 是简化 Spring 应用开发的工具。它们的核心区别如下:
1. 定位与功能
特性 | Spring MVC | Spring Boot |
---|---|---|
核心定位 | Spring 框架的 Web 开发模块(实现 MVC 架构) | 快速开发工具,简化整个 Spring 应用的配置 |
主要功能 | 处理 HTTP 请求、视图渲染、数据绑定等 | 提供自动配置、内嵌服务器、依赖管理、监控等功能 |
依赖关系 | 需要手动配置 DispatcherServlet、视图解析器等 | 通过 spring-boot-starter-web 自动集成 Spring MVC |
2. 配置复杂度
-
Spring MVC
需要手动配置 XML 或 Java 类(如web.xml
、@Configuration
类),例如:<!-- 传统 Spring MVC 的 web.xml 配置 --> <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> </servlet>
开发者需自行处理组件扫描、视图解析器、拦截器等配置。
-
Spring Boot
通过 自动配置(Auto-Configuration) 简化流程,只需添加依赖即可自动配置 Spring MVC:<!-- pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
无需手动配置
DispatcherServlet
或web.xml
,Spring Boot 自动完成。
3. 依赖管理
-
Spring MVC
需要手动管理依赖版本(如 Spring Core、Spring Web、Jackson 等),容易引发版本冲突。 -
Spring Boot
通过 Starter 依赖 统一管理版本,例如:spring-boot-starter-web
自动包含 Spring MVC、Tomcat、Jackson 等依赖;- 所有 Starter 的版本由 Spring Boot 父工程统一维护,避免冲突。
4. 内嵌服务器
-
Spring MVC
需要将应用部署到外部服务器(如 Tomcat、Jetty)。 -
Spring Boot
默认内嵌 Tomcat/Jetty,可直接打包为 可执行 JAR 运行:java -jar myapp.jar
5. 适用场景
场景 | Spring MVC | Spring Boot |
---|---|---|
Web 层开发 | ✅ 适合需要精细控制 MVC 配置的项目 | ✅ 适合快速构建 Web 应用(如 REST API) |
微服务/云原生 | ❌ 需额外配置 | ✅ 内嵌服务器、Actuator 监控、外部化配置 |
传统企业级应用 | ✅ 结合 Spring 其他模块(如 Security) | ✅ 简化配置,快速整合其他组件 |
总结:协作而非替代
- Spring MVC 是 Spring 的 Web 层实现,负责处理请求和响应。
- Spring Boot 是 Spring 的“脚手架”,整合了 Spring MVC 并简化其配置。
(例如:@SpringBootApplication
注解隐式启用了 Spring MVC 的自动配置)
示例:用 Spring Boot 快速启动一个 Spring MVC 应用:
@SpringBootApplication // 包含 @Configuration、@EnableAutoConfiguration、@ComponentScan @RestController public class DemoApp { public static void main(String[] args) { SpringApplication.run(DemoApp.class, args); // 自动启动内嵌 Tomcat } @GetMapping("/hello") public String hello() { return "Hello from Spring Boot + Spring MVC!"; } }
通过 Spring Boot,开发者无需手动配置 DispatcherServlet
或 XML,即可直接运行一个完整的 Spring MVC 应用。