news 2026/8/10 23:20:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 之后)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 23:12:13

从技术护城河看Google的持久影响力:基础设施、开源与AI研究

在技术领域,我们常常会看到关于巨头公司技术路线、产品策略和未来前景的激烈讨论。每当一个大型技术平台出现战略调整、某个明星产品线被关闭,或是面临新兴挑战者的竞争时,“看衰”的声音便会甚嚣尘上。然而,对于像 Google 这样深…

作者头像 李华
网站建设 2026/8/10 23:11:59

高效解决DevDocs存储瓶颈:实用容量管理与性能优化指南

高效解决DevDocs存储瓶颈:实用容量管理与性能优化指南 【免费下载链接】devdocs API Documentation Browser 项目地址: https://gitcode.com/GitHub_Trending/de/devdocs DevDocs是一款强大的API文档浏览器,帮助开发者快速查阅各类技术文档。然而…

作者头像 李华
网站建设 2026/8/10 23:07:39

飞算JavaAI 智能引导:五步实现从需求到工程级源码的自动化生成

飞算JavaAI 智能引导:五步实现从需求到工程级源码的自动化生成 还在为从需求文档到可运行代码之间的巨大鸿沟发愁?飞算JavaAI的智能引导功能,只需五个步骤,就能将自然语言描述的业务需求转化为完整的Java工程级源代码。 一、什么是…

作者头像 李华
网站建设 2026/8/10 22:56:57

动态规划解决选数求和问题:洛谷P15800题解

1. 项目概述:洛谷P15800动态规划题目解析 这道来自洛谷平台的P15800题目,是GESP2026年3月六级认证的真题,考察的核心算法思想是动态规划在组合数学问题中的应用。题目要求从给定的n个正整数中选取若干个数,使得它们的和等于给定的…

作者头像 李华
网站建设 2026/8/10 22:56:08

Python投资组合分析:从数据到决策的量化投资实战指南

Python投资组合分析:从数据到决策的量化投资实战指南 【免费下载链接】pyfolio Portfolio and risk analytics in Python 项目地址: https://gitcode.com/gh_mirrors/py/pyfolio 在量化投资领域,如何从海量金融数据中提取有价值的洞察&#xff0c…

作者头像 李华