Skip to content

01.2 — Bean 生命周期

定位: 从 BeanDefinition 到销毁——Spring Bean 的完整生命周期 面试高频度: ⭐⭐⭐⭐⭐ 考查方式: 生命周期各阶段、AOP 代理生成时机、扩展点

一、这是什么?为什么需要它?

Bean 生命周期定义了 Spring 如何管理一个 Bean 从创建到销毁的全过程。理解生命周期是理解 Spring AOP、事务、@PostConstruct 等机制的基础。

二、原理拆解

Bean 生命周期 8 阶段

  1. 实例化:通过反射创建 Bean 原始实例,此时依赖尚未注入
  2. 属性赋值:填充 @Autowired、@Value、@Resource 等标注的字段/方法
  3. Aware 回调:让 Bean 获取容器基础设施(BeanName、BeanFactory、ApplicationContext 等)
  4. BeanPostProcessor#postProcessBeforeInitialization:前置处理
  5. 初始化:@PostConstruct -> InitializingBean.afterPropertiesSet() -> 自定义 init-method
  6. BeanPostProcessor#postProcessAfterInitialization:后置处理,AOP 动态代理在此生成(重要!)
  7. Bean 就绪:可供使用
  8. 销毁:@PreDestroy -> DisposableBean.destroy() -> 自定义 destroy-method

生命周期流程图

三、关键点详解

阶段关键动作扩展点
实例化构造函数推断、反射创建无参构造 / @Autowired 构造
属性赋值填充 @Autowired/@Value字段注入、Setter 注入
Aware 回调注入容器基础设施(BeanName、BeanFactory、ApplicationContext)setBeanName()、setBeanFactory()
前置处理postProcessBeforeInitialization自定义 BeanPostProcessor
初始化@PostConstruct -> InitializingBean -> init-method@PostConstruct、InitializingBean
后置处理AOP 代理在此生成AbstractAutoProxyCreator
销毁@PreDestroy -> DisposableBean -> destroy-method@PreDestroy、DisposableBean

四、实战验证

java
@Component
public class LifecycleBean implements InitializingBean, DisposableBean {
    
    public LifecycleBean() {
        System.out.println("1. 实例化");
    }
    
    @Autowired
    private SomeDependency dependency;

    @PostConstruct
    public void postConstruct() {
        System.out.println("2. @PostConstruct 初始化");
    }
    
    @Override
    public void afterPropertiesSet() {
        System.out.println("3. InitializingBean.afterPropertiesSet");
    }
    
    @Override
    public void destroy() {
        System.out.println("4. 销毁");
    }
}
// 启动时输出顺序:
// 1. 实例化 -> 2. @PostConstruct -> 3. afterPropertiesSet

五、面试视角

追问答案要点
AOP 代理在哪个阶段生成?postProcessAfterInitialization(后置处理)
@PostConstruct 和 afterPropertiesSet 执行顺序?@PostConstruct 先执行,然后 InitializingBean
如何在 Bean 初始化前后加入自定义逻辑?实现 BeanPostProcessor 接口
aware 接口的作用?让 Bean 获取容器基础设施(BeanName、BeanFactory 等)

📚 相关链接

  • **IoC与DI原理** — 依赖注入在生命周期第 2 阶段
  • **AOP 板块** — AOP 代理在 postProcessAfterInitialization 生成
  • ← 返回 **返回 IoC 容器索引**

Knowledge4J — Java 知识库