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 实例分别传递给

         上述接口的以下两个方法:

      

<?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的生命周期。

猜你喜欢

转载自blog.csdn.net/lsh15846393847/article/details/88911244