Java面试题更新 2026-08-05

请讲解 Spring 框架中 Bean 的生命周期,包括实例化、初始化、销毁等主要阶段及其回调机制。

技术原理

考察说明

考查对 Spring 核心容器 Bean 生命周期各阶段及扩展点的理解。

回答思路

  1. 【回答框架 1】Bean 生命周期始于容器读取配置元数据创建 BeanDefinition,随后通过构造器或工厂方法进行实例化。实例化后,容器执行依赖注入,填充属性。
  2. 【回答框架 2】初始化阶段前,若 Bean 实现了 BeanNameAware、BeanFactoryAware、ApplicationContextAware 等接口,会依次回调对应方法,注入相关资源。随后执行 BeanPostProcessor 的 postProcessBeforeInitialization 方法。
  3. 【回答框架 3】接着执行 InitializingBean 的 afterPropertiesSet 方法或自定义的 init-method,完成初始化。之后执行 BeanPostProcessor 的 postProcessAfterInitialization 方法,此时 Bean 可被使用。
  4. 【回答框架 4】容器关闭时,若 Bean 实现了 DisposableBean 或指定 destroy-method,会执行销毁回调,释放资源。整个生命周期由容器管理,并可通过 Aware 接口和 BeanPostProcessor 进行扩展。
  5. 【关键点 1】生命周期分为实例化、依赖注入、初始化前、初始化、初始化后、销毁六个核心阶段。
  6. 【关键点 2】Aware 接口和 BeanPostProcessor 分别在依赖注入后和初始化前后提供扩展点。
  7. 【关键点 3】InitializingBean 与 init-method 在 BeanPostProcessor 前后顺序固定。
  8. 【关键点 4】销毁阶段仅对单例 Bean 生效,原型 Bean 需自行管理销毁。
  9. 【易错点 1】混淆 BeanPostProcessor 与 Aware 接口的执行顺序,导致扩展点选择错误。
  10. 【易错点 2】忽略原型 Bean 默认不执行销毁回调,造成资源泄漏。
  11. 【易错点 3】误以为初始化方法和构造器同时执行,实际上依赖注入在初始化前完成。