IOC容器中bean的生命周期方法-Spring IOC容器可以管理bean的生命周期,Spring允許在bean的生命周期的特定點(diǎn)執(zhí)行定制的任務(wù)-Spring IOC容器對(duì)bean的生命周期進(jìn)行管理的過(guò)程:
-在bean的聲明里設(shè)置init-method和dectory-method屬性,為bean指定初始化和銷(xiāo)毀方法創(chuàng)建bean后置處理器-bean后置處理器允許在調(diào)用初始化方法前后對(duì)bean進(jìn)行額外的處理-bean后置處理器對(duì)IOC容器里所有bean實(shí)例逐一處理,而非單一實(shí)例。其典型應(yīng)用是:檢查bean屬性的正確性或根據(jù)特定的標(biāo)準(zhǔn)更改bean的屬性-對(duì)bean后置處理器而言,需要實(shí)現(xiàn)Interface BeanPostProcessor接口。在初始化方法被調(diào)用前后,Spring將把每個(gè)bean實(shí)例分別傳遞給上述接口的以下兩個(gè)方法-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 <!-- 實(shí)現(xiàn)BeanPostProcessor接口,并且提供13 Object postProcessBeforeInitialization(Object bean, String beanName) init-method方法之前調(diào)用14 Object postProcessAfterInitialization(Object bean, String beanName) init-method方法之后調(diào)用15 的實(shí)現(xiàn)16 bean:bean實(shí)力本身17 beanName:IOC容器中配置的bean的名字18 返回值是實(shí)際上返回給用戶(hù)的那個(gè)bean,注意:可以在以上兩個(gè)方法中修改返回的bean,設(shè)置返回一個(gè)新的bean19 -->20 <!-- 配置bean的后置處理器 。 不需要配置id,IOC容器自動(dòng)識(shí)別是一個(gè)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 }測(cè)試類(lèi):
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 //關(guān)閉容器15 ((AbstractApplicationContext) ctx).close();16 }17 }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注