Spring--bean的生命周期

IOC容器中bean的生命周期方法
-Spring IOC容器可以管理bean的生命周期,Spring允许在bean的生命周期的特定点执行定制的任务
-Spring IOC容器对bean的生命周期进行管理的过程:

  • -通过构造器或工厂方法创建bean实例
  • -为bean的属性设置值和对其他bean的引用
  • -调用bean的初始化方法
  • -bean可以使用了
  • -当容器关闭时,调用bean的销毁方法

-在bean的声明里设置init-method和dectory-method属性,为bean指定初始化和销毁方法

创建bean后置处理器
-bean后置处理器允许在调用初始化方法前后对bean进行额外的处理
-bean后置处理器对IOC容器里所有bean实例逐一处理,而非单一实例。其典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性
-对bean后置处理器而言,需要实现Interface BeanPostProcessor接口。在初始化方法被调用前后,Spring将把每个bean实例分别传递给上述接口的以下两个方法
-postProcessBeforeInitialization
-postProcessAfterInitialization

添加bean后置处理器后bean的生命周期

  • -通过构造器或工厂方法创建bean实例
  • -为bean的属性设置值和对其他bean的引用
  • -将bean实例传递给bean前置处理器的postProcessBeforeInitialization方法
  • -调用bean的初始化方法
  • -将bean实例传递给bean后置处理器的postProcessAfterInitialization方法
  • -bean可以使用了
  • -当容器关闭时,调用bean的销毁方法

bean的配置文件:
 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5 
 6     <bean id="car" class="com.yl.cycle.Car" 
 7         init-method="init" destroy-method="destory">
 8         <property name="brand" value="Audi"></property>
 9     </bean>
10     
11     
12     <!-- 实现BeanPostProcessor接口,并且提供
13         Object postProcessBeforeInitialization(Object bean, String beanName)   init-method方法之前调用
14         Object postProcessAfterInitialization(Object bean, String beanName)    init-method方法之后调用
15         的实现
16         bean:bean实力本身
17         beanName:IOC容器中配置的bean的名字
18         返回值是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,设置返回一个新的bean
19     -->
20     <!-- 配置bean的后置处理器 。 不需要配置id,IOC容器自动识别是一个BeanPostProcessor-->
21     <bean class="com.yl.cycle.MyBeanPostProcessor"></bean>
22     
23 </beans>

bean的后置处理器:

 1 package com.yl.cycle;
 2 
 3 import org.springframework.beans.BeansException;
 4 import org.springframework.beans.factory.config.BeanPostProcessor;
 5 
 6 public class MyBeanPostProcessor implements BeanPostProcessor {
 7 
 8     @Override
 9     public Object postProcessAfterInitialization(Object bean, String beanName)
10             throws BeansException {
11         System.out.println("postProcessAfterInitialization: " + bean + ", " + beanName);
12         
13         Car car = new Car();
14         car.setBrand("Ford");
15         
16         return car;
17     }
18 
19     @Override
20     public Object postProcessBeforeInitialization(Object bean, String beanName)
21             throws BeansException {
22         System.out.println("postProcessBeforeInitialization: " + bean + ", " + beanName);
23         
24         if ("car".equals(beanName)) {
25             
26         }
27         
28         
29         return bean;
30     }
31 
32 }

测试类:

 1 package com.yl.cycle;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.AbstractApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 public class CycleMain {
 8     public static void main(String[] args) {
 9         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
10         
11         Car car = (Car)ctx.getBean("car");
12         System.out.println(car);
13         
14         //关闭容器
15         ((AbstractApplicationContext) ctx).close();
16     }
17 }

 





 

posted @ 2014-11-10 21:32  _freedom_yl  阅读(477)  评论(0编辑  收藏  举报