使用回調接口對受管Bean進行與處理和後處理
1、初始化回調接口InitializingBean 要對某個受管Bean進行預處理裡時,可以實現Spring定義的 初始化回調接口InitializingBean,它定義了一個方法如下:
1 void afterPropertiesSet() throws Exception
開發者可以在受管Bean中實現該接口,再在此方法中對受管Bean進行預處理。
注意:應該盡量避免使用這種方法,因為這種方法會將代碼與Spring耦合起來。推薦使用下面的使用 init-method方法。
2、析構回調接口DisposableBean 同上面一樣,要對受管Bean進行後處理,該Bean可以實現析構回 調接口DisposableBean,它定義的方法如下:
1 void destroy() throws Exception
為了降低與Spring的耦合度,這種方法也不推薦。
下面的例子(例程3.6)簡要的展示如何使用這兩個接口。
新建Java工程,名字為IoC_Test3.6,為其添加Spring開發能力後,新建一ioc.test包,添加一個 Animal類,該類實現InitializingBean接口和DisposableBean接口,再為其添加name和age成員,Geter和 Seter方法,speak方法。完成後代碼如下:
1 package ioc.test;
2
3 import org.springframework.beans.factory.DisposableBean;
4 import org.springframework.beans.factory.InitializingBean;
5
6 public class Animal implements InitializingBean, DisposableBean {
7
8 private String name;
9 private int age;
10
11 public String speak(){
12 return "我的名字:"+this.name+"我的年齡:"+this.age;
13 }
14
15 public void afterPropertiesSet() throws Exception {
16 System.out.println("初始化接口afterPropertiesSet()方法正在運行!");
17 }
18
19 public void destroy() throws Exception {
20 System.out.println("析構接口destroy()方法正在運行!");
21 }
22
23 //Geter和Seter省略
24
25 }
26
在配置文件中配置受管Bean,代碼如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
7 <bean id="animal" class="ioc.test.Animal">
8
9 <property name="age" value="5"></property>
10 <property name="name" value="豬"></property>
11
12 </bean>
13
14 </beans>
15
新建含有主方法的TestMain類,添加測試代碼,如下:
1 package ioc.test;
2
3 import org.springframework.context.support.AbstractApplicationContext;
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5
6 public class TestMain {
7
8 public static void main(String[] args) {
9
10 AbstractApplicationContext ac = new ClassPathXmlApplicationContext ("applicationContext.xml");
11 //注冊容器關閉鉤子,才能關掉容器,調用析構方法
12 ac.registerShutdownHook();
13 Animal animal = (Animal)ac.getBean("animal");
14 System.out.println(animal.speak());
15
16 }
17 }
18
運行工程,結果如下:
以看到,Spring IoC容器自動的調用了兩個接口的相關方法對bean進行了預處理和後處理。
注意:由於後處理是在Bean被銷毀之前調用,所有要在MyEclipse中看到後處理方法的輸出,必須先注 冊容器的關閉鉤子,在主方法退出時關掉容器,這樣其管理的Bean就會被銷毀。當然也可以直接調用容器 的close方法來顯示的關閉容器。