IOC容器中bean的生命周期方法-Spring IOC容器可以管理bean的生命周期,Spring允許在bean的生命周期的特定點執行定制的任務-Spring IOC容器對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的配置文件:
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,設置返回一個新的bean19 -->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 @Override20 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 }
新聞熱點
疑難解答