【bean生命周期十步】深入解析Spring核心机制
作为Java程序员,面试中被问到bean生命周期简直是家常便饭。今天我就用最接地气的方式,结合真实面试场景,给你掰开揉碎讲透这十个关键步骤!文末还有重磅福利,记得看到最后哦~
🔥 2025年Java面试宝典最新版
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码: 9b3g
一、什么是Bean生命周期?
简单说就是Spring容器管理Bean从诞生到销毁的全过程。掌握它,你才能理解Spring的核心运作机制!

二、十步详解Bean生命周期
步骤1:Bean定义加载(Bean Definition Loading)
容器启动时先扫描所有配置(XML/注解),把每个bean的元信息解析成BeanDefinition对象。生命周期的起点就在这里!
步骤2:Bean实例化(Instantiation)
根据BeanDefinition通过反射/new/工厂方法创建bean实例。注意此时对象还是"半成品"!
步骤3:属性填充(Populate Properties)
给bean注入依赖项。比如@Autowired的字段、<property>标签配置的值都在这一步注入。
步骤4:BeanNameAware回调
如果bean实现了BeanNameAware,容器会把它的ID传进来。适合需要知道自己名字的场景。
步骤5:BeanFactoryAware回调
实现BeanFactoryAware接口的bean能拿到容器引用,可直接操作容器。
步骤6:前置初始化(BeanPostProcessor前置处理)
BeanPostProcessor的postProcessBeforeInitialization()介入!这是AOP等高级特性的实现基础。
步骤7:初始化(InitializingBean & init-method)
关键阶段!按顺序触发:
InitializingBean接口的afterPropertiesSet()- 自定义的
init-method(如@PostConstruct)
步骤8:后置初始化(BeanPostProcessor后置处理)
BeanPostProcessor的postProcessAfterInitialization()执行。bean在这里可能被包装成代理对象!

步骤9:使用中(In Use)
此时bean已完成所有初始化,进入服务状态。业务逻辑都在这个阶段执行。
步骤10:销毁(DisposableBean & destroy-method)
容器关闭时触发销毁流程:
@PreDestroy注解方法DisposableBean接口的destroy()- 自定义
destroy-method
三、高频面试题破解
面试官:@PostConstruct和afterPropertiesSet()有什么区别?
你答:执行顺序不同!@PostConstruct最先执行(本质是InitDestroyAnnotationBeanPostProcessor处理的),接着是afterPropertiesSet(),最后是XML配置的init-method。
面试官:BeanPostProcessor有什么用?
你答:它是bean生命周期的扩展点!比如:
- Spring AOP用它生成代理对象
@Autowired注解通过AutowiredAnnotationBeanPostProcessor实现- 可自定义处理器实现bean的修改/增强
🎁 特别福利
最近很多同学在准备面试,如果需要购买面试鸭会员,通过面试鸭返利网找我可返现25元!覆盖主流大厂真题+实时更新,性价比超高:

四、避坑指南
- 循环依赖:三级缓存解决setter注入循环,但构造器注入会报错
- 作用域影响:prototypebean不执行销毁方法
- 扩展点选择:
- 修改bean属性用
BeanPostProcessor - 修改bean定义用
BeanFactoryPostProcessor
- 修改bean属性用
理解bean生命周期十步曲,不仅面试通关,更能真正吃透Spring框架的设计思想。遇到复杂问题,就想想当前bean处在生命周期的哪个阶段,很多难题迎刃而解!


