hualinux spring 3.12:IOC 容器中 Bean 的生命週期方法

目錄

一、知識點

二、例子

2.1 建立一個新的測試類

2.2 創建XML配置文件

2.3 運行

三、創建 Bean 後置處理器

3.1 知識點

3.2 相關代碼


瞭解一下Bean的生命週期及方法,對開發和維護都是有好處的

一、知識點

  • Spring IOC 容器可以管理 Bean 的生命週期, Spring 允許在 Bean 生命週期的特定點執行定製的任務.

  • Spring IOC 容器對 Bean 的生命週期進行管理的過程:
    • 通過構造器或工廠方法創建 Bean 實例
    • 爲 Bean 的屬性設置值和對其他 Bean 的引用
    • 調用 Bean 的初始化方法
    • Bean 可以使用了
    • 當容器關閉時, 調用 Bean 的銷燬方法
  • 在 Bean 的聲明裏設置 init-method 和 destroy-method 屬性, 爲 Bean 指定初始化和銷燬方法.

二、例子

這裏直接寫代碼了,因爲比較簡單

2.1 建立一個新的測試類

src-->com.hualinux.beans.cycle.Car.java

package com.hualinux.beans.cycle;

public class Car {
    private  String brand;

    public Car() {
        System.out.println("Car's Constructor...");
    }

    public void setBrand(String brand) {
        System.out.println("setBrand...");
        this.brand = brand;
    }

    public void init2(){
        System.out.println("init...");
    }

    public void destroy(){
        System.out.println("destroy...");
    }

}

2.2 創建XML配置文件

src右擊-->new-->XML Configuration File-->Spring config-->輸入名字“beans-cycle” 

    <bean id="car" class="com.hualinux.beans.cycle.Car"
          init-method="init2" destroy-method="destroy">
        <property name="brand" value="寶馬"/>
    </bean>

2.3 運行

src-->com.hualinux.beans.cycle.Main.java

package com.hualinux.beans.cycle;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-cycle.xml");
        Car car= (Car) ctx.getBean("car");
        System.out.println(car);

        //關閉IOC容器
        ((ClassPathXmlApplicationContext) ctx).close();
    }
}

運行結果爲:

Car's Constructor...
setBrand...
init...
com.hualinux.beans.cycle.Car@3967e60c
destroy...

 

三、創建 Bean 後置處理器

3.1 知識點

  • Bean 後置處理器允許在調用初始化方法前後對 Bean 進行額外的處理.
  • Bean 後置處理器對 IOC 容器裏的所有 Bean 實例逐一處理, 而非單一實例. 其典型應用是: 檢查 Bean 屬性的正確性或根據特定的標準更改 Bean 的屬性.

對Bean 後置處理器而言, 需要實現

接口. 在初始化方法被調用前後, Spring 將把每個 Bean 實例分別傳遞給上述接口的以下兩個方法:

 

添加 Bean 後置處理器後 Bean 的生命週期

  • Spring IOC 容器對 Bean 的生命週期進行管理的過程:
    • 通過構造器或工廠方法創建 Bean 實例
    • 爲 Bean 的屬性設置值和對其他 Bean 的引用
    • Bean 實例傳遞給 Bean 後置處理器的 postProcessBeforeInitialization 方法
    • 調用 Bean 的初始化方法
    • Bean 實例傳遞給 Bean 後置處理器的 postProcessAfterInitialization方法
    • Bean 可以使用了
    • 當容器關閉時, 調用 Bean 的銷燬方法

3.2 相關代碼

src-->com.hualinux.beans.cycle.MyBeanPostProcessor.java

package com.hualinux.beans.cycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization:"+bean+","+beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization:"+bean+","+beanName);
        return bean;
    }
}

beans-cycle.xml配置文件修改如下:

<?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">

    <!--
    實現BeanPostProcessor接口,並具體提供
    Object postProcessBeforeInitialization(Object bean, String beanName):init-method之前被調用
    Object postProcessAfterInitialization(Object bean, String beanName):init-method之後被調用
    實現

    bean:bean實例本身
    beanName:IOC 容器配置的bean的名字
    返回值:是實際上返回給用戶的那個bean, 注意:可以在以上兩個訪求 中修改返回的bean,甚至返回一個新的bean
-->

    <!-- 配置bean的後置處理器-->
    <bean class="com.hualinux.beans.cycle.MyBeanPostProcessor"/>


    <bean id="car" class="com.hualinux.beans.cycle.Car"
          init-method="init2" destroy-method="destroy">
        <property name="brand" value="寶馬"/>
    </bean>



</beans>

運行com.hualinux.beans.cycle.Main.java,效果:

Car's Constructor...
setBrand...
postProcessBeforeInitialization:com.hualinux.beans.cycle.Car@25d250c6,car
init...
postProcessAfterInitialization:com.hualinux.beans.cycle.Car@25d250c6,car
com.hualinux.beans.cycle.Car@25d250c6
destroy...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章