第二课:Spring Boot 到底启动了什么?——一个后端系统是如何“活过来”的
本文深入解析了SpringBoot启动过程的本质:从main方法到完整后端系统的构建过程。核心观点包括:1)SpringBoot本质是创建系统容器而非简单启动项目;2)启动过程分为创建容器、组件扫描、Bean装配、依赖注入和Web服务器启动五个关键步骤;3)系统通过代理模式实现无侵入的AOP控制;4)开发者编写的类实质是系统注册的业务模块。理解这一启动机制对培养系统级开发能力至关重要,使开发者能够
如果你只会写
@RestController,你只会用后端。
如果你看懂了 Spring Boot 启动过程,你才开始掌控后端。
这一课的目标只有一个:
👉 搞清楚:一个 Java 后端系统,是怎么从一个 main 方法,变成“请求处理系统”的。
一、后端系统的本质不是项目,是“容器”
我们从最核心的一行代码开始:
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
这一行,不是“启动项目”。
它做的是:
✅ 创建一个长期运行的系统容器
这个容器干三件大事:
- 扫描所有组件
- 创建对象(Bean)
- 建立关系(依赖注入)
👉 从这一刻开始,你写的代码,不再是“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
-
出问题只会重启
-
调不通只会猜
真正的高级后端,对系统是这种感觉:
我知道现在谁创建了谁
我知道这行代码属于启动期还是运行期
我知道这个能力是容器层还是业务层
这叫:系统感。
更多推荐


所有评论(0)