估计不少刚入行的小伙伴都跟我一样,被 Spring 全家桶搞得头大:Spring、Spring Boot、Spring MVC 这仨到底啥关系?为啥老有人把它们混着说?
一句话先给结论:
- Spring 是地基:所有功能的基础,核心是帮你管理对象和解耦
- Spring MVC 是 Web 层框架:基于 Spring,专门处理 HTTP 请求那点事
- Spring Boot 是脚手架:打包了 Spring 和 Spring MVC,帮你省掉 90% 的配置工作
说白了,Spring 是内功心法,Spring MVC 是招式套路,Spring Boot 就是直接给你配好的武功秘籍套餐。今天咱们用大白话把这三者扒明白。
一、Spring:Java 开发的 "地基" 框架
为啥需要 Spring?
早年间 Java 开发有多坑?你想调用个对象,得自己 new;想加个日志功能,得在每个方法里写一遍;数据库事务出问题,还得手动回滚。代码耦合得像一团乱麻,改一处牵一发而动全身。
Spring 就干了件大事:把对象的创建、依赖、管理全接过来了。你不用再操心 "怎么建对象",只需要告诉 Spring"你要啥对象",它自动给你配齐。
核心黑科技:IoC 和 AOP
这俩词听着玄乎,其实特简单:
- IoC(控制反转) :以前是你主动 new 对象(比如UserService service = new UserService()),现在是 Spring 帮你 new 好,你直接用@Autowired注解 "拿来" 用。就像以前做饭得自己买菜,现在美团直接送上门。
- AOP(面向切面) :比如日志、事务这些重复代码,不用写在业务逻辑里了。你可以定义一个 "切面",告诉 Spring"在所有 add 开头的方法执行前,自动打印日志"。就像给所有快递贴个 "易碎" 标签,快递员自动按规矩处理。
适合啥场景?
所有 Java 项目几乎都离不开它。小到工具类,大到分布式系统,Spring 就像地基一样,默默支撑着整个应用。
二、Spring MVC:Web 开发的 "交通指挥中心"
有了 Spring 这个地基,Web 开发还需要专门的 "交通规则"------ 这就是 Spring MVC 的活儿。
它管啥?
用户在浏览器输入网址、APP 调用 API,这些 HTTP 请求怎么处理?数据怎么传给后端?后端处理完怎么返回?这些全靠 Spring MVC 管。
你可以把它理解成Web 层的 "交通指挥中心" ,核心组件DispatcherServlet就是指挥长:
- 浏览器发请求过来(比如访问/user/1)
- 指挥长(DispatcherServlet)看一眼地址,找对应的处理员(Controller)
- 处理员(比如 UserController)调用业务逻辑(Service),处理数据
- 处理完把结果打包,指挥长再转发给前端(返回 JSON 或页面)
开发有多爽?
用注解就能搞定大部分工作:
less
@RestController
public class UserController {
@GetMapping("/user/{id}") // 处理GET请求,地址是/user/xxx
public User getUser(@PathVariable Long id) {
return userService.findById(id); // 直接返回对象,自动转JSON
}
}
不用配置 XML,不用写一堆转发代码,加几个注解就搞定一个 API 接口。前后端分离项目里,这玩意儿简直是神器。
适合啥场景?
所有需要处理 HTTP 请求的场景:网站、APP 后端 API、小程序接口... 只要涉及 "前端发请求,后端给响应",它就有用武之地。
三、Spring Boot:快速开发的 "一键启动" 工具
用 Spring+Spring MVC 开发时,有个头疼的问题:配置太 TM 多了!
- 要配数据库连接池(DataSource)
- 要配 Spring MVC 的视图解析器
- 要配 Tomcat 服务器
- 还得手动导一堆依赖,稍不注意版本就冲突...
Spring Boot 横空出世:这些破事我全帮你干了!
核心套路:约定优于配置
它有俩狠活:
- 自动配置:你引入spring-boot-starter-web依赖,它自动帮你配好 Spring MVC、Tomcat、JSON 解析器。你要连 MySQL?加个spring-boot-starter-jdbc,数据库连接池都给你默认配好。
- Starter 依赖:比如spring-boot-starter-web就像个 "Web 套餐",里面包含了 Spring MVC、Tomcat、Jackson 等所有 Web 开发需要的东西。不用再一个个找依赖,直接选套餐就行。
启动有多快?
一个 main 方法搞定:
typescript
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args); // 一行代码启动服务
}
}
不用部署到 Tomcat,直接java -jar运行 JAR 包,服务器自带。开发环境秒启动,部署流程简化一半。
适合啥场景?
现在新项目基本首选它:
- 快速开发 API 接口(比如小程序后端)
- 微服务项目(每个服务独立打包运行)
- 原型验证(几天就能搭个可运行的 demo)
三者关系:不是替代,是进化
用个比喻总结:
- Spring 是地基,规定了盖楼的基本规则
- Spring MVC 是楼上的 "交通系统",负责内部和外部的通信
- Spring Boot 是施工队,按规则快速把楼盖起来,还自带精装修
技术演进路径很明显:
→ 最早用纯 Spring,手动配一堆 XML
→ 加个 Spring MVC 处理 Web 请求,还是要配很多东西
→ 现在用 Spring Boot,自动集成前两者,几行配置就能跑
怎么选?看场景!
- 写个非 Web 工具类?只用 Spring 核心就行
- 开发传统 Web 项目,需要定制化配置?Spring + Spring MVC
- 新启动项目,想快速上线?直接上 Spring Boot(默认包含 Spring MVC)
- 微服务架构?必须 Spring Boot,搭配 Spring Cloud 更香
最后说句大实话
别纠结 "必须先学哪个"。实际开发中,现在 90% 的项目都用 Spring Boot,你可以从它入手,用着用着就会发现:哦,原来这底下是 Spring 的 IoC 在干活;哦,原来处理请求的是 Spring MVC 的机制。
就像你先学会开车,再慢慢研究发动机原理一样。先用起来,再深究底层,效率更高。
看完这篇要是还分不清,欢迎评论区拍砖,我再给你掰开揉碎了讲~