← [ BACK_TO_NOTES ]

Spring Web 概览

Spring Web 在应用层的定位:IoC、MVC 请求处理与何时引入;不替代语言主线。

#concept #growing #dev #java

[!info] related notes

Spring Web 概览

这个概念为什么出现

企业 Java Web 多数运行在 Spring 生态。它提供依赖注入、Web MVC、生态集成。但若跳过语言与 HTTP 底座,排障只能停在“注解魔法”。

[!abstract] 一句话理解 Spring Framework 提供 IoC/DI 基础;Spring MVC 通过 Servlet 栈的 DispatcherServlet 处理请求,WebFlux 是另一套响应式 Web 栈。它们属于应用框架层,不是 Java 语言功能。

最小可运行示例

场景:用纯 Java 验证构造注入与委托

这是单文件可运行的适配器示例,不启动 Spring 或 HTTP 服务。省略 public 的接口可与 public 类放在同一文件中。

// 仅演示构造注入;无 Spring 依赖。
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

结合场景再看三个关注点

  1. 用例与 Web 适配分离。
  2. DI 构造注入便于测试。
  3. 先懂 HTTP 语义再学注解映射。

核心概念与准确模型

1. IoC/DI

容器负责创建和连接受管理组件;构造注入也可以像本例一样手动完成。仅在普通对象上添加注解,不代表对象已被容器管理或代理。

2. Spring MVC 请求链路(简化)

Servlet filters → DispatcherServlet → HandlerMapping/HandlerAdapter → Controller → 返回值处理。返回值可能经视图解析,也可能经 HttpMessageConverter 写入响应体;异常另经解析链处理。

3. Boot 的自动配置

约定与 starter 依赖,见 Spring Boot。

4. WebMVC vs WebFlux

MVC 基于 Servlet API;WebFlux 提供非阻塞、响应式模型,常用少量事件循环线程,不能直接在其上执行阻塞 JDBC 调用。MVC 是否使用虚拟线程取决于 JDK、服务器与显式配置,并非因为使用 Spring 就默认开启;虚拟线程也不会把 MVC 变成 WebFlux。

边界情况与反直觉行为

  1. 过滤器/拦截器顺序。
  2. 默认代理式事务中,同一对象内部自调用绕过代理,内层方法的事务注解不会新建所期待的边界;外层已有事务仍可能继续生效。
  3. 启动变慢与组件扫描范围。

常见误区

[!warning] 常见误区:不会 Java 只背 Spring 注解 类型擦除、代理、类加载、异常仍决定排障能力。

工程实践

  1. 控制器变薄。
  2. 配置与密钥外置。
  3. Actuator 健康与指标。
  4. 与标准库服务对照学习。

本节总结

  • Spring=应用框架层
  • DI + MVC 主线
  • 语言主线不可替代

自测题

  1. 为什么构造注入优于字段注入(测试角度)?
  2. Spring 与 JDK HttpServer 如何分工学习?
参考答案
  1. 可在测试中直接 new 并传入假依赖,不启动容器。
  2. 先 HttpServer 懂语义,再 Spring 学装配与生态。

延伸阅读与资料来源

资料类型支撑内容
Spring Web docs官方Web 栈
Spring Boot Reference官方Boot
创建于 2026/7/15 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本