如果你只会写 @RestController,你只会用后端。
如果你看懂了 Spring Boot 启动过程,你才开始掌控后端

这一课的目标只有一个:

👉 搞清楚:一个 Java 后端系统,是怎么从一个 main 方法,变成“请求处理系统”的。

一、后端系统的本质不是项目,是“容器”

我们从最核心的一行代码开始:

public static void main(String[] args) {
    SpringApplication.run(App.class, args);
}

这一行,不是“启动项目”。

它做的是:

✅ 创建一个长期运行的系统容器

这个容器干三件大事:

  1. 扫描所有组件
  2. 创建对象(Bean)
  3. 建立关系(依赖注入)

👉 从这一刻开始,你写的代码,不再是“new 出来的对象”,而是系统托管对象

这和 Android 是一模一样的:

Android 后端
Application 启动 Spring Boot 启动
系统创建组件 容器创建 Bean
AMS 管生命周期 Spring 管生命周期
Intent 分发 DispatcherServlet 分发

👉 Spring Boot 的本质是:系统内核

二、启动时,Spring Boot 到底做了什么(工程视角)

可以抽象成五步:

main 启动
  ↓
创建 Spring 容器
  ↓
扫描类路径(@ComponentScan)
  ↓
创建所有 Bean
  ↓
注入依赖 + 建立系统结构
  ↓
启动 Web 服务器(Tomcat)

拆开看:

✅ 1. 创建容器(系统世界诞生)

Spring 会创建一个核心对象:

👉 ApplicationContext

你可以把它理解为:

后端世界的“操作系统内核”

后面:

  • Controller
  • Service
  • Repository
  • DataSource
  • Redis
  • MQ

全部注册进这个“系统”。

✅ 2. 扫描组件(发现模块)

Spring 扫描:

  • @Component
  • @Service
  • @Controller
  • @Repository
  • @Configuration

作用是:

把“普通类”升级成“系统组件”。

👉 从“程序代码”变成“系统模块”。

✅ 3. 创建 Bean(系统装配)

Spring 会:

  • 反射创建对象
  • 统一管理生命周期
  • 建立依赖关系

你不再 new,而是:

@Autowired
OrderService orderService;

👉 这是“系统装配”,不是“对象创建”。

✅ 4. 注入依赖(系统连线)

Spring 会分析:

  • 构造器
  • 字段
  • 接口

然后构建整个系统对象图:

Controller → Service → Domain → Repository → DB

👉 这一步,决定了你系统的结构形态

✅ 5. 启动 Web 服务器(系统对外开放)

Spring Boot 内嵌 Tomcat / Netty。

此时系统:

✔ 端口监听
✔ 请求可接收
✔ 分发系统就绪

👉 后端系统“上线”。

三、一个请求进来时,Spring 在做什么

当你访问:

GET /api/health

真实发生的是:

请求到达 Tomcat
   ↓
进入 DispatcherServlet(总入口)
   ↓
查找 Controller 映射
   ↓
参数解析 + 校验
   ↓
调用 Controller 方法
   ↓
进入 Service / Domain
   ↓
事务 / 日志 / 安全(AOP)
   ↓
Repository / DB
   ↓
返回结果
   ↓
序列化 JSON
   ↓
HTTP Response

👉 DispatcherServlet 是后端的“指挥大厅”。

类比 Android:

Window → ViewRootImpl → 事件分发 → View → 回调

四、为什么 Spring 能“无侵入地控制系统”(AOP)

你会看到大量这种东西:

  • @Transactional
  • @Async
  • @Cacheable
  • @Secured

你没调用它们。

但它们生效了。

原因只有一个:

👉 Spring 不是调用你,是包着你

原理一句话:

Spring 用“代理对象”接管了你的组件。

真实调用是:

ControllerProxy → ServiceProxy → Service → Repository

代理里插入:

  • 事务
  • 日志
  • 权限
  • 缓存
  • 监控

👉 这就是后端工程最核心能力:

横切能力系统化

五、你写的不是类,是“系统插件”

当你写:

@Service
public class OrderService {}

你真正做的不是“写类”。

而是:

👉 给系统注册一个“业务模块”。

Spring 会为它:

  • 创建实例
  • 托管生命周期
  • 管依赖
  • 套代理
  • 参与调度

👉 从这一刻起,你是“系统开发者”,不是“函数开发者”。

六、为什么理解启动过程极其重要

因为它决定你后面是否会:

  • 滥用注解

  • 到处 @Autowired

  • 出问题只会重启

  • 调不通只会猜

真正的高级后端,对系统是这种感觉:

我知道现在谁创建了谁
我知道这行代码属于启动期还是运行期
我知道这个能力是容器层还是业务层

这叫:系统感

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐