Spring框架中Bean的生命周期

目录

  • 编程笔记:Spring框架中Bean的生命周期
    • 1. 概念
    • 2.Bean生命周期的五个阶段
    • 3.代码示例
    • 4.管理bean
    • 总结

编程笔记:Spring框架中Bean的生命周期

1. 概念

在Spring框架中,Bean的生命周期指的是从Bean被创建到被销毁的整个过程。Spring容器负责管理Bean的生命周期,确保在适当的时机调用相应的方法。

2.Bean生命周期的五个阶段

Spring框架中Bean的生命周期主要包括以下阶段:

  • 实例化(Instantiation): Bean的实例被创建。
  • 属性注入(Population): Spring容器通过依赖注入等方式设置Bean的属性。
  • 初始化(Initialization): 如果Bean实现了InitializingBean接口或在配置文件中配置了初始化方法,这些方法会在Bean初始化时被调用。
  • 使用(In Use): Bean被应用程序使用。
  • 销毁(Destruction): 如果Bean实现了DisposableBean接口或在配置文件中配置了销毁方法,这些方法会在容器销毁时被调用。

3.代码示例

### 3.1实例化
<!-- 配置文件中定义Bean -->
<bean id="myBean" class="com.example.MyBean"/>

### 3.2 属性注入
<!-- 通过属性注入设置Bean属性 -->
<bean id="myBean" class="com.example.MyBean">
    <property name="propertyName" value="propertyValue"/>
</bean>

### 3.3 初始化
<!-- 在配置文件中定义初始化方法 -->
<bean id="myBean" class="com.example.MyBean" init-method="initMethod"/>

### 3.4 使用
// 在应用程序中使用Bean
MyBean myBean = (MyBean) context.getBean("myBean");
myBean.doSomething();

### 3.5 销毁
<!-- 在配置文件中定义销毁方法 -->
<bean id="myBean" class="com.example.MyBean" destroy-method="destroyMethod"/>

4.管理bean

Spring框架通过BeanPostProcessor、InitializingBean和DisposableBean等接口以及配置文件中的init-method和destroy-method属性来管理Bean的生命周期。

Spring提供 BeanPostProcessor 接⼝来进⾏扩展。其中,BeanPostProcessor 接⼝定义了两个⽅法postProcessBeforeInitialization 和 postProcessAfterInitialization,分别在 Bean 的初始化前后被调⽤,⽤于扩展 Bean 初始化的过程;

public class CustomBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 在Bean初始化方法执行前进行处理
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 在Bean初始化方法执行后进行处理
        return bean;
    }
}


public class MyBean implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化逻辑
    }
}


public class MyBean implements DisposableBean {
    @Override
    public void destroy() throws Exception {
        // 销毁逻辑
    }
}

如:在实际开发中,经常需要在Bean初始化时执行一些逻辑,例如数据初始化、资源加载等。
public class MyBean implements InitializingBean, DisposableBean {

    private String property;

    @Override
    public void afterPropertiesSet() throws Exception {
        // 在属性设置后执行的初始化逻辑
    }

    public void doSomething() {
        // Bean的业务逻辑
    }

    @Override
    public void destroy() throws Exception {
        // 在Bean销毁时执行的清理逻辑
    }
}

此外,Spring还提供了BeanFactoryPostProcessor 来进⾏扩展 。BeanFactoryPostProcessor 接⼝定义了⼀个⽅法 postProcessBeanFactory,⽤于在 Bean ⼯⼚实例化 Bean 定义后对其进⾏修改。

//实现接口
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        // 在这里对BeanFactory进行定制和扩展
    }
}

<!-- 在配置文件中注册BeanFactoryPostProcessor -->
<bean class="com.example.CustomBeanFactoryPostProcessor"/>

//注册BeanFactoryPostProcessor
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        // 获取所有Bean的定义
        String[] beanNames = beanFactory.getBeanDefinitionNames();
        for (String beanName : beanNames) {
            BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
            // 下面对Bean的定义进行定制和扩展
           ........
        }
    }
}


总结

默认情况下,Bean生命周期分为五个阶段

阶段 描述 示例代码
实例化 Bean的实例被创建
属性设置 设置Bean的属性
初始化 执行初始化逻辑
使用 Bean被应用程序使用 MyBean myBean = (MyBean) context.getBean("myBean");
销毁 执行销毁逻辑

加上 Bean 的后置处理器后(Bean 的初始化前后被调⽤的postProcessBeforeInitialization 和postProcessAfterInitialization方法),实际是7个阶段。

你可能感兴趣的:(学习笔记,spring,java,rpc)