1.Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.
2. Spring IOC 容器对 Bean 的生命周期进行管理的过程:
–通过构造器或工厂方法创建 Bean 实例
–为 Bean 的属性设置值和对其他 Bean 的引用
–调用 Bean 的初始化方法
–Bean 可以使用了
–当容器关闭时, 调用 Bean 的销毁方法
3. 在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.+
<bean id="car" class="com.lishenhuan.beans.scope.Car" init-method="init" destroy-method="destory">
<property name="brand" value="haha"></property>
</bean>
package com.lishenhuan.beans.scope;
public class Car {
public Car() {
System.out.println("car constu,,,,");
}
private String brand;
public void setBrand(String brand) {
System.out.println("setBrand");
this.brand = brand;
}
public void init() {
System.out.println("init");
}
public void destory() {
System.out.println("destory");
}
}
4. Bean 后置处理器
4.1 Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.
4.2 Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是:
检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.
4.3 对Bean 后置处理器而言, 需要实现接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给
上述接口的以下两个方法:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="car" class="com.lishenhuan.beans.scope.Car" init-method="init" destroy-method="destory">
<property name="brand" value="haha"></property>
</bean>
<!--
使用bean后置处理器的步骤:
1.实现BeanPostProcessor接口。
public Object postProcessAfterInitialization(Object arg0, String arg1):init-method之前调用
public Object postProcessBeforeInitialization(Object arg0, String arg1):init-method之后调用
2.Object arg0 传进来的bean实例
3.String arg1 IOC容器中配置的bean实例的id
4.返回值:是实际返回给用户的bean。可以在以上两个方法中对bean修改
-->
<!-- 配置bean的后置处理器:不需要id,IOC容器会自动识别BeanPostProcessor -->
<bean class="com.lishenhuan.beans.scope.MyBeanPostProcessor"></bean>
</beans>
接口的实现类
package com.lishenhuan.beans.scope;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("postProcessAfterInitialization" +arg0+"," +arg1);
Car car = new Car();
car.setBrand("li");
return car;
}
@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("postProcessBeforeInitialization" +arg0+"," +arg1 );
return arg0;
}
}
4.5 加入bean后置处理器后的IOC容器内bean的生命周期。