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 執行個體分别傳遞給
上述接口的以下兩個方法:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLxkzNyITNykDMxADNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
<?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的生命周期。