Spring Web 概览
Spring Web 在应用层的定位:IoC、MVC 请求处理与何时引入;不替代语言主线。
#type / concept
#status / growing
#tech / dev
#resource / java
[!info] 关联笔记
- 所属 MOC:Web 后端 · 学习路线
- 前置概念:标准库 HTTP 服务 · 异常 · 分层
- 后续概念:Spring Boot · 数据访问
- 容易混淆:Spring 生态 = Java 语言
Spring Web 概览
这个概念为什么出现
企业 Java Web 多数运行在 Spring 生态。它提供依赖注入、Web MVC、生态集成。但若跳过语言与 HTTP 底座,排障只能停在“注解魔法”。
[!abstract] 一句话理解 Spring Web 用 IoC 容器装配组件,用 DispatcherServlet/WebFlux 模型处理 HTTP;它是应用框架层,建立在 Java 类型、异常、并发与字节码机制之上。
最小可运行示例
场景:对照理解“控制器只是适配器”(伪代码形态)
// 概念示意:真实项目用 Spring 注解与 Boot 自动配置
public interface PlaceOrderUseCase {
String place(String skuId, int qty);
}
public class OrderControllerAdapter {
private final PlaceOrderUseCase useCase;
public OrderControllerAdapter(PlaceOrderUseCase useCase) {
this.useCase = useCase;
}
// @PostMapping("/orders") 在真实 Spring 中绑定
public String place(String skuId, int qty) {
return useCase.place(skuId, qty);
}
public static void main(String[] args) {
PlaceOrderUseCase uc = (sku, q) -> "ok-" + sku + "-" + q;
System.out.println(new OrderControllerAdapter(uc).place("S1", 1));
}
}
javac OrderControllerAdapter.java && java OrderControllerAdapter
期望:
ok-S1-1
结合场景再看三个关注点
- 用例与 Web 适配分离。
- DI 构造注入便于测试。
- 先懂 HTTP 语义再学注解映射。
核心概念与准确模型
1. IoC/DI
2. Spring MVC 请求链路(简化)
DispatcherServlet → HandlerMapping → Controller → 返回值处理
3. Boot 的自动配置
约定与 starter 依赖,见 Spring Boot。
4. WebMVC vs WebFlux
线程模型不同;默认多数业务 MVC + 虚拟线程/平台线程池。
边界情况与反直觉行为
- 过滤器/拦截器顺序。
- 事务代理自调用失效。
- 启动变慢与组件扫描范围。
常见误区
[!warning] 常见误区:不会 Java 只背 Spring 注解 类型擦除、代理、类加载、异常仍决定排障能力。
工程实践
- 控制器变薄。
- 配置与密钥外置。
- Actuator 健康与指标。
- 与标准库服务对照学习。
本节总结
- Spring=应用框架层
- DI + MVC 主线
- 语言主线不可替代
自测题
- 为什么构造注入优于字段注入(测试角度)?
- Spring 与 JDK HttpServer 如何分工学习?
参考答案
- 可在测试中直接 new 并传入假依赖,不启动容器。
- 先 HttpServer 懂语义,再 Spring 学装配与生态。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| Spring Web docs | 官方 | Web 栈 |
| Spring Boot Reference | 官方 | Boot |