框架是什么:从手写到 Spring Boot
这是什么:框架(Framework) = 别人替你搭好架子、写好零件,你只管往里填自己那部分代码的套路;本章主角是 Spring Boot。
为什么用:上一板块的面向对象让我们学会了把代码组织成类和对象,但离「写出跑在网页上的程序」还差一步——服务器怎么起、路由怎么配、依赖怎么装,全是重复劳动。磨刀不误砍柴工,这章的概念想通了,后面六章的每一步你都知道「为什么」。
如何用:本章先讲清框架和库差在哪一个字,再把 Spring Boot 拆成「Spring + 自动配置 + 内嵌服务器」三块,最后跟 Flask 比一比。
为什么需要框架:别重复造轮子
设想你要做一个网站。除了业务本身(比如"展示留言"),你还得处理一大堆和业务无关的杂活:监听端口、解析 HTTP 请求、判断用户访问的是哪个网址、把结果按 HTTP 格式返回、出错时给出友好提示……
把这份"杂活清单"摊开看看有多长:
| 杂活 | 具体要干什么 |
|---|---|
| 网络监听 | 盯着 8080 端口,别错过任何请求 |
| 解析请求 | 把浏览器发来的 HTTP 报文拆成"访问了哪个网址、带了什么参数" |
| 路由分发 | 按网址找到该处理它的那段代码 |
| 组装响应 | 把处理结果按 HTTP 格式包好、填上状态码发回去 |
| 异常兜底 | 出错时返回友好页面,而不是让浏览器收到一坨乱码 |
| 资源管理 | 线程池、连接、内存,用完要回收,不能越用越漏 |
这些活每个网站都要干,干法还大同小异。如果每做一个项目都从零写一遍,就像每次盖房都先自己烧砖——框架就是别人烧好的砖。而且烧砖的工匠见多识广:你闭门造车写出的网络代码,可能漏掉成百上千种边角情况,框架早就替你踩过一遍坑。
框架(Framework)= 别人写好的半成品 + 一套使用约定。 你往骨架里填业务代码,杂活它全包。前面学过的 ArrayList 是一个"轮子",而框架是把 Web 开发要用的轮子打包好的"整套工具箱"。
框架和库,差在一个字
你可能听过另一个词"库(library)"——ArrayList、Scanner 都是库。框架和库都是别人写好的代码,区别在谁说了算:
| 对比项 | 库 | 框架 |
|---|---|---|
| 关系 | 你写主程序,来调用库 | 框架写主流程,来调用你的代码 |
| 控制权 | 在你手里 | 在框架手里 |
| 类比 | 你做菜,盐糖随便放 | 你进中央厨房,按它的流程出餐 |
| 例子 | ArrayList、Scanner |
Spring Boot、Django |
这个"控制权反转给框架"的特点,术语叫控制反转(IoC,Inversion of Control)——你按框架的约定写好零件,框架负责在合适的时机来调用。第一次听必然发懵,后面章节写代码时你会反复体会到:"咦,我没写 main 循环啊,谁在调我的方法?"——就是框架。现在只需记住这个词,混个脸熟。
Spring 生态一句话
Java 世界的框架之王叫 Spring——企业级开发的事实标准,全家桶式生态,各个成员各管一摊:
| 成员 | 管什么 | 一句话理解 |
|---|---|---|
| Spring 容器 | 创建和管理对象 | 面向对象里"new 对象"的升级版,对象交给框架管 |
| Spring MVC | 处理网页请求 | "网址 → 方法"的调度中心 |
| Spring Data | 操作数据库 | 增删改查不用手写大量模板代码 |
| Spring Security | 管登录鉴权 | 谁能进哪个门,它说了算 |
| Spring Boot | 快速起步 | 把上面全家桶自动组装好的"一键启动版" |
第一次见不用记住每个成员,只要有个印象:Spring 是一棵大树,Spring Boot 是它最好爬的那根主干——本系列教程走的正是这根主干。
Spring Boot = Spring + 自动配置 + 内嵌服务器
老 Spring 有个痛点:配置太繁。启动前要写一堆 XML 告诉框架怎么干活,部署还得单独装一个 Tomcat 服务器。Spring Boot 是 Spring 官方的"开箱即用"版:
- 自动配置:常见搭配它全猜得到,配置少写 90%
- 内嵌服务器:Tomcat 直接打包进项目,
main方法一跑,网站就起来了 - 起步依赖:想用 Web 功能?勾一个选项,相关 jar 包全部自动到位
新老搭配直观感受一下:
| 要干的事 | 老 Spring | Spring Boot |
|---|---|---|
| 装服务器 | 单独下载安装 Tomcat,再部署上去 | 内嵌好了,跑 main 就行 |
| 声明功能 | 手写大段 XML 配置 | 勾一个起步依赖 |
| 集成第三方 | 挨个调版本、写配置 | 版本搭配官方已调好 |
| 项目启动 | 配置错了半天起不来 | 约定齐全,基本开箱就跑 |
这就是它成为 Java Web 入门首选的原因。
提前剧透:对象交给管家管
还记得面向对象里我们亲手 new Dog(...) 吗?到了 Spring 的世界里,大部分对象不用你自己 new——你告诉 Spring"有这么一个类",它负责创建、装配、按需递给你。这种把"造对象"的活交出去的做法,正是前面说的控制反转最典型的落地。
再配上 Spring Boot 的自动配置:你勾了 Web 功能,它就自动把内嵌服务器、请求解析这些零件装好;你写了控制器,它就自动把路由挂上。你声明"要什么",框架决定"怎么做"——理解了这句话,下一章跑通第一个应用时,你会对"为什么代码这么少"心里有数。也不用担心"交出去会不会失控":管家的每一步都有日志可查、有配置可改,学习的路子是先享受便利,再逐步深入它的内部。
和 Flask 比一比
学过 Python 的 Flask?Spring Boot 就是它的"重量级亲戚"——对比着学,两边都更牢固:
| 对比项 | Flask(Python) | Spring Boot(Java) |
|---|---|---|
| 定位 | 轻量微框架,几行代码起步 | 全家桶框架,开箱即用 |
| 哲学 | 极简,功能靠扩展拼装 | 约定优于配置,常用功能全配好 |
| Web 服务器 | 自带开发服务器 | 内嵌 Tomcat |
| 依赖管理 | pip + requirements.txt | Maven + pom.xml |
| 常见舞台 | 小工具、原型、脚本配套 | 企业级后端、微服务 |
共同点也很大:都是「网址 → 函数」的思路。Flask 里叫路由装饰器 @app.route,Spring Boot 里叫注解 @GetMapping——下一章就上手。思路既然相通,学过 Flask 的读者可以把后面六章的每个知识点都在脑子里"翻译"回 Flask 对应的做法,迁移学习效率翻倍。
差别主要体现在"分量"上:Flask 像一辆自行车,轻便灵活,配件自己挑;Spring Boot 像一辆整车出厂的汽车,重一些,但空调、安全气囊一应俱全,开起来省心。小工具选自行车,企业项目上汽车——没有谁更好,只有合不合适。本系列选 Spring Boot,因为它是就业市场的主流,也因为它"约定优于配置"的思路能让你少踩无数坑。
❓ 常见问题
Q1:框架这么好,还要先学 Java 基础和面向对象吗?
必须要。框架是"烧好的砖",但砌墙的手艺还是你的:不懂类和对象,看不懂控制器的代码结构;不懂集合,接不住框架传来的数据。框架放大能力,不替代基础——这也是本系列把面向对象放在 Web 前面的原因。
Q2:Spring、Spring MVC、Spring Boot 到底什么关系?
一句话:Spring 是全家桶总称;Spring MVC 是全家桶里管网页请求的那一件;Spring Boot 是把全家桶快速组装起来的启动器。写代码时三者天天见面,但概念上记住"Boot 负责组装,MVC 负责接客"就够入门了。
Q3:前端框架(如 Vue)也是这种"框架"吗?
思路相通(也是别人搭骨架你填内容),但管的地盘不同:Vue 管浏览器里的页面交互,Spring Boot 管服务器端的数据和逻辑。本系列先打后端地基,将来前后端一握手,整条链路就通了。
📝 本章小结
- 框架 = 别人写好的半成品 + 一套使用约定;监听端口、解析请求这些杂活它全包
- 框架和库的核心区别是控制权:你调用库,框架调用你(控制反转 IoC)
- Spring 是 Java 生态的框架之王;Spring Boot 是它的开箱即用版:自动配置 + 内嵌服务器 + 起步依赖
- 和 Flask 同走「网址 → 方法」的路子,但 Spring Boot 分量更重、配套更全,适合企业级项目
- 框架放大你的能力,但替代不了面向对象和集合这些基础
- 下一步动作很简单:打开 start.spring.io 亲手生成一个项目,概念立刻落地
- 记忆口诀:杂活交给框架干,Spring 管家说了算;Boot 自动配置加内嵌,一条命令跑网站。
动手改
- 打开 start.spring.io(下一章的主角),只看不点,认认界面上有哪些选项
- 想一个你常用的网站(比如购物站),列出它背后至少 3 件"和业务无关的杂活"
- 回顾 面向对象 里的
ArrayList:它和"框架"在"别重复造轮子"上有什么相同与不同?
下一章:环境搭建与第一个应用,让 Spring Boot 真的跑起来 🐸