SpringBoot:全套生命周期全景详解/应用级+Bean级

SpringBoot 生命周期分为两大核心体系 :SpringBoot 应用启动生命周期(全局容器启动流程) 、Spring Bean 生命周期(单个对象创建销毁流程)。日常开发、面试高频考察,本文全程阶段拆解、配套钩子、注解、执行顺序与避坑点,全景梳理无遗漏。

一、核心概念区分(必懂)

很多开发者容易混淆两个生命周期,二者层级完全不同:

应用级生命周期 :整个 SpringBoot 项目从 启动初始化 → 容器就绪 → 运行中 → 停止销毁 的全局流程,控制整个项目的启动与销毁。

Bean级生命周期 :Spring 容器中 单个 Bean 对象 从实例化、属性填充、初始化到销毁的完整流程,只针对单个业务对象。

二、SpringBoot 应用全局生命周期(7大核心阶段)

SpringBoot 启动全程由SpringApplication 驱动,通过 SpringApplicationRunListener 监听7个固定生命周期阶段,贯穿项目启动到运行、失败全流程。

应用生命周期完整阶段清单

阶段 触发时机 核心作用 常用扩展方式
starting 项目刚启动,容器未初始化 最早期启动回调,可做启动日志、全局初始化标记 自定义 RunListener
environmentPrepared 环境变量、配置文件加载完成,上下文未创建 读取/修改配置、激活环境、配置加密解密 EnvironmentPostProcessor
contextPrepared Spring 上下文创建完成,未加载 Bean 上下文前置预处理,注册工具类、前置组件 ApplicationContextInitializer
contextLoaded 所有 Bean 加载完成,未刷新容器 Bean 加载后、容器刷新前的自定义处理 自定义监听器
started 容器刷新完成、内嵌服务器启动完毕,项目启动成功 启动成功后执行业务初始化(初始化缓存、定时任务) ApplicationRunner / CommandLineRunner
running 项目完全就绪,对外提供服务 常驻运行,接收客户端请求 无自定义扩展,系统自动维持
failed 项目启动异常终止 异常日志记录、告警、资源兜底释放 自定义失败监听器

应用启动关键扩展接口执行顺序(面试高频)

启动优先级从早到晚:环境预处理 → 上下文初始化 → Bean加载 → 启动后置执行

1、EnvironmentPostProcessor:最早,修改配置环境

2、ApplicationContextInitializer:上下文初始化

3、Bean 生命周期全程:所有 Bean 实例化、初始化

4、ApplicationRunner / CommandLineRunner:启动成功最后执行

三、Spring Bean 完整生命周期(9步标准流程)

SpringBoot 完全沿用 Spring IoC 的 Bean 生命周期,是开发中最常用、最核心的生命周期,包含实例化、属性填充、Aware 回调、前置后置处理、初始化、销毁全流程。

Bean 生命周期标准执行顺序

扫描解析 → 实例化 → 属性填充 → Aware接口 → 前置处理 → 初始化 → 后置处理 → 就绪使用 → 销毁

阶段 执行内容 对应注解/接口 核心用途
1. 扫描解析 Spring 扫描 @Component/@Bean,生成 BeanDefinition 无 确定需要管理的 Bean
2. 实例化 通过反射调用构造方法创建对象 无 生成空对象实例
3. 属性填充 自动装配、@Value、依赖注入赋值 @Autowired、@Value 给 Bean 注入属性与依赖
4. Aware 接口回调 依次回调各类 Aware 感知方法 BeanNameAware、BeanFactoryAware、ApplicationContextAware 让 Bean 感知自身名称、工厂、上下文
5. 前置初始化处理 BeanPostProcessor 前置处理 BeanPostProcessor.before 初始化前统一增强处理
6. 初始化方法执行 优先级:注解 > 接口 > 配置初始化 @PostConstruct → InitializingBean → init-method Bean 自定义初始化逻辑
7. 后置初始化处理 BeanPostProcessor 后置处理(AOP 代理在此生成) BeanPostProcessor.after Bean 增强、代理生成核心阶段
8. 就绪可用 Bean 完成所有流程,放入单例池,对外提供服务 无 业务正常调用
9. 销毁 项目关闭时执行销毁逻辑 @PreDestroy → DisposableBean → destroy-method 释放连接、关闭线程、清空资源

初始化/销毁 优先级(必考重点)

初始化优先级从高到低: @PostConstruct 注解 > InitializingBean 接口 > xml/注解指定 init-method

销毁优先级从高到低: @PreDestroy 注解 > DisposableBean 接口 > xml/注解指定 destroy-method

四、Web 专属生命周期(Servlet 三大组件)

SpringBoot Web 项目额外包含 Servlet 原生生命周期,针对请求、会话、上下文层级管理。

1. ServletContext 生命周期(全局项目级)

服务器启动初始化 → 运行常驻 → 服务器关闭销毁

2. Session 生命周期(用户会话级)

用户首次访问创建 → 会话存续 → 超时/主动销毁

3. Request 生命周期(单次请求级)

请求进入创建 → 业务处理 → 响应结束立即销毁

五、四大生命周期全景汇总表(极简记忆版)

生命周期类型 管理范围 核心阶段 开发常用钩子
SpringBoot 应用生命周期 整个项目 启动→环境准备→容器准备→Bean加载→启动完成→运行→失败 ApplicationRunner、RunListener
Spring Bean 生命周期 单个 Bean 对象 实例化→赋值→感知→初始化→使用→销毁 @PostConstruct、@PreDestroy
ServletContext 生命周期 全局 Web 容器 容器启动初始化、全局销毁 ServletContextListener
Request/Session 生命周期 请求/用户会话 创建、存续、销毁 过滤器、拦截器

六、高频开发与面试总结

SpringBoot 最核心的两个生命周期:应用启动生命周期 + Bean 生命周期,其余为 Web 场景扩展。

Bean 初始化首选注解 :优先使用 @PostConstruct,简洁无侵入,适配 SpringBoot 开发规范。

资源释放首选 :@PreDestroy,用于关闭连接池、定时器、线程池等资源。

项目启动后置任务 :使用 ApplicationRunner,优先级高于 CommandLineRunner。

AOP 代理时机:发生在 Bean 初始化后置处理阶段(BeanPostProcessor 之后)。

相关推荐
wangbing112511 分钟前
springboot应用关闭时触发动作
java·spring boot·后端
weixin_460443563 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w6 小时前
什么是AOP
java
Cc.Y7 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
paopaokaka_luck7 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787057 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev7 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
Sarvartha7 小时前
Lambda 表达式和函数式接口
java·开发语言
计算机毕业设计杰瑞7 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计
colinu7 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++