全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 10 分钟 ✍️ juanwangdev

Bean的生命周期

理解Bean生命周期对于掌握Spring框架至关重要,它定义了Bean从创建到销毁的完整过程。

生命周期四个阶段

Java
实例化 → 属性赋值 → 初始化 → 销毁

完整生命周期流程

Java
1. 实例化 Bean
       ↓
2. 属性赋值(依赖注入)
       ↓
3. 处理 Aware 接口
   - BeanNameAware
   - BeanFactoryAware
   - ApplicationContextAware
       ↓
4. BeanPostProcessor.postProcessBeforeInitialization()
       ↓
5. 初始化方法
   - @PostConstruct
   - InitializingBean.afterPropertiesSet()
   - init-method
       ↓
6. BeanPostProcessor.postProcessAfterInitialization()
       ↓
7. Bean 就绪,可使用
       ↓
8. 销毁方法
   - @PreDestroy
   - DisposableBean.destroy()
   - destroy-method

代码示例

定义Bean

XML
@Component
public class LifecycleBean implements BeanNameAware, InitializingBean, DisposableBean {

    private String beanName;

    // 1. 实例化(构造器)
    public LifecycleBean() {
        System.out.println("1. 构造器执行");
    }

    // 2. 属性赋值(依赖注入)
    @Autowired
    public void setOtherBean(OtherBean otherBean) {
        System.out.println("2. 属性赋值");
    }

    // 3. BeanNameAware回调
    @Override
    public void setBeanName(String name) {
        this.beanName = name;
        System.out.println("3. BeanNameAware: " + name);
    }

    // 4. @PostConstruct初始化
    @PostConstruct
    public void init() {
        System.out.println("4. @PostConstruct初始化");
    }

    // 5. InitializingBean回调
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean.afterPropertiesSet()");
    }

    // 6. 自定义init-method
    public void customInit() {
        System.out.println("6. customInit()");
    }

    // 7. @PreDestroy销毁
    @PreDestroy
    public void preDestroy() {
        System.out.println("7. @PreDestroy销毁");
    }

    // 8. DisposableBean回调
    @Override
    public void destroy() throws Exception {
        System.out.println("8. DisposableBean.destroy()");
    }

    // 9. 自定义destroy-method
    public void customDestroy() {
        System.out.println("9. customDestroy()");
    }
}

BeanPostProcessor

text
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        System.out.println("BeanPostProcessor前置处理: " + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("BeanPostProcessor后置处理: " + beanName);
        return bean;
    }
}

初始化方法对比

方式执行顺序推荐度
@PostConstruct1⭐⭐⭐⭐⭐
InitializingBean.afterPropertiesSet()2⭐⭐⭐
init-method3⭐⭐⭐⭐

销毁方法对比

方式执行顺序推荐度
@PreDestroy1⭐⭐⭐⭐⭐
DisposableBean.destroy()2⭐⭐⭐
destroy-method3⭐⭐⭐⭐

XML配置方式

text
<bean id="lifecycleBean"
      class="com.example.LifecycleBean"
      init-method="customInit"
      destroy-method="customDestroy"/>

Aware接口说明

接口作用
BeanNameAware获取Bean名称
BeanFactoryAware获取BeanFactory
ApplicationContextAware获取ApplicationContext
EnvironmentAware获取Environment
ResourceLoaderAware获取ResourceLoader

要点总结

  1. 生命周期四阶段:实例化、属性赋值、初始化、销毁
  2. 初始化方法执行顺序:@PostConstruct → InitializingBean → init-method
  3. 销毁方法执行顺序:@PreDestroy → DisposableBean → destroy-method
  4. BeanPostProcessor在初始化前后执行,常用于AOP代理创建
  5. 推荐使用注解方式(@PostConstruct/@PreDestroy)更简洁

📝 发现内容有误?点击此处直接编辑

← 上一篇 Bean的别名
下一篇 → Bean的继承
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库