【Spring -- 04 Bean的生命周期】

在 Spring 框架中,bean 的生命周期是指一个 bean 从创建到销毁的整个过程。以下是详细的生命周期步骤和各步骤的关键点:

1. 实例化(Instantiation)

在这一步中,Spring 通过调用构造函数创建 bean 实例。这可以是无参构造函数或者带参构造函数。

2. 属性填充(Property Populating)

Spring 通过依赖注入(Dependency Injection, DI)将 bean 所依赖的属性或引用对象注入到 bean 实例中。这包括通过 @Autowired 注解、XML 配置文件中的 <property> 元素等进行属性设置。

3. Bean Name Aware 接口回调(BeanNameAware Interface Callback)

如果 bean 实现了 BeanNameAware 接口,Spring 会调用 setBeanName(String name) 方法将配置中的 bean 名称传递给 bean。

4. Bean Factory Aware 接口回调(BeanFactoryAware Interface Callback)

如果 bean 实现了 BeanFactoryAware 接口,Spring 会调用 setBeanFactory(BeanFactory beanFactory) 方法,将当前的 BeanFactory 传递给 bean。

5. ApplicationContext Aware 接口回调(ApplicationContextAware Interface Callback)

如果 bean 实现了 ApplicationContextAware 接口,Spring 会调用 setApplicationContext(ApplicationContext applicationContext) 方法,将当前的 ApplicationContext 传递给 bean。

6. Bean Post Processors 前置处理(Bean Post Processors - Before Initialization)

在初始化之前,Spring 会调用所有已注册的 BeanPostProcessorpostProcessBeforeInitialization(Object bean, String beanName) 方法,对 bean 进行前置处理。

7. 初始化(Initialization)

在这一步,Spring 调用 bean 的初始化方法。初始化方法可以通过以下几种方式定义:

  • 实现 InitializingBean 接口并覆盖 afterPropertiesSet() 方法。
  • 在 XML 配置文件中使用 init-method 属性指定初始化方法。
  • 使用 @PostConstruct 注解标注初始化方法。

8. Bean Post Processors 后置处理(Bean Post Processors - After Initialization)

在初始化之后,Spring 会调用所有已注册的 BeanPostProcessorpostProcessAfterInitialization(Object bean, String beanName) 方法,对 bean 进行后置处理。

9. Bean 使用(Bean Use)

在应用程序中,bean 被客户端代码使用。此阶段是应用程序的正常操作阶段,bean 根据业务逻辑执行相应的操作。

10. 销毁(Destruction)

在应用程序关闭时,Spring 容器会调用 bean 的销毁方法。销毁方法可以通过以下几种方式定义:

  • 实现 DisposableBean 接口并覆盖 destroy() 方法。
  • 在 XML 配置文件中使用 destroy-method 属性指定销毁方法。
  • 使用 @PreDestroy 注解标注销毁方法。

示例代码

以下是一个简单的示例,展示了 bean 的生命周期方法:

public class MyBean implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware {

    private String property;

    // 构造函数
    public MyBean() {
        System.out.println("Bean 实例化");
    }

    // 设置属性
    public void setProperty(String property) {
        this.property = property;
    }

    // BeanNameAware 接口方法
    @Override
    public void setBeanName(String name) {
        System.out.println("设置 Bean 名称: " + name);
    }

    // BeanFactoryAware 接口方法
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("设置 BeanFactory");
    }

    // ApplicationContextAware 接口方法
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("设置 ApplicationContext");
    }

    // 初始化方法
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化 Bean");
    }

    // 自定义初始化方法
    public void customInit() {
        System.out.println("自定义初始化方法");
    }

    // 销毁方法
    @Override
    public void destroy() throws Exception {
        System.out.println("销毁 Bean");
    }

    // 自定义销毁方法
    public void customDestroy() {
        System.out.println("自定义销毁方法");
    }
}

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值