- IOC容器管理bean的生命周期,Spring允许在bean生命周期的特定点执行特定任务;
- IOC容器对bean的生命周期进行管理的过程
- 通过构造器或工厂方法创建bean实例
- 为bean的属性设置值和对其他bean的引用
- 调用bean初始化方法
- 使用bean
- 容器关闭,调用bean的销毁方法
- 可以在bean中设置init-method和destroy-method属性,为bean指定初始化和销毁方法
配置xml指定初始化于销毁函数
<bean id="car" class="spring.cycle.Car" init-method="init" destroy-method="destroy">
<property name="brand" value="FuTe"></property>
</bean>
在Car类中设置初始化以及销毁等函数
public class Car {
public Car(){
System.out.println("Car's Constructor...");
}
private String brand;
public void setBrand(String brand) {
System.out.println("setBrand...");
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 + '\'' +
'}';
}
}
主函数
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car = (Car) classPathXmlApplicationContext.getBean("car");
System.out.println(car.toString());
// 关闭IOC容器
classPathXmlApplicationContext.close();
}
运行结果
创建Bean后置处理器
- bean后置处理器允许在调用初始化方法前后对bean进行额外处理
- bean后置处理器对IOC容器的所有bean实例会逐一处理
- bean写一个类实现BeanPostProcessor接口中的postProcessBeforeInitialization函数与postProcessAfterInitialization函数其中postProcessBeforeInitialization始在init函数之前执行而postProcessAfterInitialization则在init之后执行
写函数MyBeanPostProcessor类实现BeanPostProcessor接口
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("postProcessBeforeInitialization: " +o+","+s);
return o;
}
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("postProcessAfterInitialization: " +o+","+s);
return o;
}
}
配置xml文件
<bean class="spring.cycle.MyBeanPostProcessor"></bean>
再次运行主函数的结果