天天看點

Spring----學習(7)----IOC 容器中 Bean 的生命周期

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 執行個體分别傳遞給

         上述接口的以下兩個方法:

Spring----學習(7)----IOC 容器中 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的生命周期。

Spring----學習(7)----IOC 容器中 Bean 的生命周期