Spring管理Bean的生命周期
2020-03-18 本文已影响0人
BlueSkyBlue
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的销毁方法。