Spring Boot、Spring MVC、Spring 三者核心区别
它们代表了Spring生态中三个不同层次和定位的概念,关系是层层递进的。
一、核心定义与定位
| 项目 | 核心定位 | 一句话概括 |
|---|---|---|
| Spring Framework | 基石与核心容器 | 一个提供IoC(控制反转)容器 和**AOP(面向切面编程)**支持的基础框架,是所有Spring项目的根基。 |
| Spring MVC | Web层解决方案 | 基于Spring Framework构建的一个MVC架构的Web框架,专门用于处理HTTP请求和构建Web应用。 |
| Spring Boot | 快速开发与整合工具包 | 一个基于"约定大于配置"思想,对Spring全家桶(包括Spring MVC)进行封装和自动化配置的快速应用开发脚手架。 |
二、详细阐述与对比
1. Spring Framework:地基与梁柱
-
是什么 :它是一个轻量级的、一站式的企业级应用开发框架。
-
核心价值:
-
IoC/DI容器 :管理所有Java对象(Bean)的创建、组装和生命周期,实现解耦。这是Spring最核心的思想。
-
AOP :将遍布应用的通用功能(如事务、日志、安全)从业务逻辑中分离,实现模块化。
-
集成能力 :提供了一个强大的粘合层,可以方便地整合MyBatis、Hibernate、Redis、消息队列等各种第三方框架。
-
-
一句话:没有Spring Framework,就没有后续的Spring MVC和Spring Boot。
2. Spring MVC:专门处理"门面"的模块
-
是什么 :Spring Framework中用于开发Web应用程序的模块。
-
核心价值:
-
清晰的MVC分层 :通过
DispatcherServlet(前端控制器)将HTTP请求分发给对应的Controller,处理后将Model数据交给View渲染,最后返回响应。 -
灵活的配置:提供了强大的数据绑定、验证、视图解析、国际化等功能。
-
-
与Spring的关系 :Spring MVC依赖于Spring Framework的IoC容器来管理其控制器(Controller)和服务层(Service)等Bean。它是Spring在Web领域的一个具体实现。
3. Spring Boot:让一切变简单的"工具箱"
-
是什么 :一个旨在简化Spring应用初始搭建和开发过程的框架。
-
核心价值:
-
自动配置 :"约定大于配置" 。根据项目依赖(如Classpath中的JAR包)自动配置 Spring应用。例如,引入了
spring-boot-starter-web,就会自动配置好内嵌Tomcat和Spring MVC。 -
起步依赖 :通过 Starter 聚合功能依赖,解决了传统的"依赖地狱"问题。只需引入一个Starter,所有相关依赖自动管理。
-
内嵌容器 :应用可以直接打包成可执行的JAR,内置了Tomcat、Jetty等Servlet容器,无需部署到外部Web服务器。
-
生产就绪 :提供监控端点(如
/actuator/health)、外部化配置等开箱即用的生产级特性。
-
-
与Spring/Spring MVC的关系:
-
Spring Boot 并不是一个全新的框架 ,它是在Spring Framework(包括Spring MVC)之上的一层抽象和封装。
-
使用Spring Boot开发Web应用,你依然在使用Spring MVC,只是省去了大量繁琐的XML或Java配置。
-
三、演进关系与开发体验对比
关系图谱:
Spring Framework (IoC, AOP, 基础)
↑
Spring MVC (基于Spring的Web模块)
↑
Spring Boot (封装以上二者,提供快速开发体验)
传统Spring vs. Spring Boot 开发体验:
| 方面 | 传统 Spring + Spring MVC 项目 | Spring Boot 项目 |
|---|---|---|
| 项目创建 | 手动创建Maven项目,复杂配置。 | 通过 Spring Initializr 在线生成,或IDE直接创建。 |
| 依赖管理 | 在pom.xml中手动添加众多依赖,需处理版本冲突。 |
引入预定义好的 Starter (如spring-boot-starter-web)。 |
| 配置工作 | 需要编写大量的applicationContext.xml、spring-mvc.xml等XML文件来配置Bean和MVC。 |
几乎零配置 。大部分配置已有合理的默认值,可通过application.yml简单覆盖。 |
| 部署方式 | 需要打包成WAR,部署到外部Tomcat等服务器。 | 打包成可执行JAR ,内嵌容器,通过java -jar命令直接运行。 |
| 整合第三方 | 手动编写Bean配置类或XML来整合MyBatis、Redis等。 | 引入对应的 Starter(如mybatis-spring-boot-starter),自动配置好大部分Bean。 |