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

Bean生命周期

Bean生命周期定义了Bean从创建到销毁的完整过程,理解生命周期有助于在合适的时机执行自定义逻辑。

四个核心阶段

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

完整生命周期流程

Java
1. 实例化(调用构造器)
       ↓
2. 属性赋值(依赖注入)
       ↓
3. 处理Aware接口
   - BeanNameAware.setBeanName()
   - BeanFactoryAware.setBeanFactory()
   - ApplicationContextAware.setApplicationContext()
       ↓
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
    private UserService userService;

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

    // 4. @PostConstruct(第一个初始化方法)
    @PostConstruct
    public void postConstruct() {
        System.out.println("3. @PostConstruct");
    }

    // 5. InitializingBean(第二个初始化方法)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("4. InitializingBean.afterPropertiesSet()");
    }

    // 6. 自定义init-method(第三个初始化方法)
    public void customInit() {
        System.out.println("5. customInit");
    }

    // 7. @PreDestroy(第一个销毁方法)
    @PreDestroy
    public void preDestroy() {
        System.out.println("6. @PreDestroy");
    }

    // 8. DisposableBean(第二个销毁方法)
    @Override
    public void destroy() throws Exception {
        System.out.println("7. DisposableBean.destroy()");
    }

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

BeanPostProcessor

Java
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {

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

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

初始化方法执行顺序

方法执行顺序来源
@PostConstruct1JSR-250
InitializingBean.afterPropertiesSet()2Spring接口
init-method3XML/注解配置

销毁方法执行顺序

方法执行顺序来源
@PreDestroy1JSR-250
DisposableBean.destroy()2Spring接口
destroy-method3XML/注解配置

XML配置

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

@Bean配置

text
@Bean(initMethod = "customInit", destroyMethod = "customDestroy")
public LifecycleBean lifecycleBean() {
    return new LifecycleBean();
}

Aware接口一览

接口获取内容
BeanNameAwareBean名称
BeanFactoryAwareBeanFactory引用
ApplicationContextAwareApplicationContext引用
EnvironmentAwareEnvironment环境信息
ResourceLoaderAwareResourceLoader

要点总结

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

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

← 上一篇 第一个Spring 应用
下一篇 → IoC容器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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