0
点赞
收藏
分享

微信扫一扫

Spring管理Bean的生命周期

勇敢乌龟 2021-09-28 阅读 63

Spring IOC容器可以管理bean的生命周期。Spring允许在Bean生命周期的特定点执行定制任务。

Spring IOC容器对Bean的生命周期进行管理的过程:

  • 通过构造器或工厂方法创建bean的实例。
  • 为bean的属性设置值或对其它bean引用。
  • 调用bean的初始化方法。
  • 使用bean。
  • 当容器关闭时,调用bean的销毁方法。

在bean的声明里设置init-method和destroy-method属性,为bean指定初始化和销毁方法。

示例:
Bean类

public class Car {
public Car(){
System.out.println("Car's constructor");
}

private String brand;

public void setBrand(String brand) {
System.out.println("Set brand.");
this.brand = brand;
}

public void init(){
System.out.println("init");
}

public void destroy(){
System.out.println("destroy");
}

@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
'}';
}
}

配置文件:

<bean id="car" class="com.spring.cycle.Car"
init-method="init" destroy-method="destroy">

<property name="brand" value="Audi"></property>
</bean>

创建bean的后置处理器

bean后置处理器允许在调用初始化方法前后对bean进行额外的处理。

bean后置处理器对IOC容器里的所有bean实例逐一进行处理,而非单一实例。典型的应用是检查bean属性的正确性或根据特定的标准更改bean的属性。

对bean后置处理器而言,需要实现interface BeanPostProcessor接口。在初始化方法被调用前后,Spring将把每个bean实例分别传递给上述接口的以下两个方法:

@Override
//在init方法之前进行调用
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return null;
}

@Override
//在init方法之后进行调用
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return null;
}

参数说明:
bean:bean容器本身。
beanName:IOC容器中配置的bean的name。
返回值是实际上返回给用户的bean。可以在以上两个方法中修改返回的bean,甚至返回一个新的bean。

不需要配置id,IOC容器会自动识别一个BeanPostProcessor。

添加Bean后置处理器后的Bean的生命周期

  • 通过构造器或工厂方法创建bean的实例。
  • 为bean的属性设置值或对其它bean引用。
  • 将bean实例传递给bean的前置处理器的postProcessBeforeInitialization方法。
  • 调用bean的初始化方法。
  • 将bean实例传递给bean的后置处理器的postProcessAfterInitialization方法。
  • 使用bean。
  • 当容器关闭时,调用bean的销毁方法。
举报

相关推荐

0 条评论