1. 程式人生 > >Spring中的InitializingBean介面的使用

Spring中的InitializingBean介面的使用

  眾所周知Spring框架主要的一個功能是IOC容器,IOC就是控制反轉將本來需要我們手動例項化bean的過程,交給了Spring去完成。讓Spring幫我們去例項化和維護bean。如果我們要在bean例項完成後執行自定義初始化方法怎麼辦呢?在Spring框架中提供了兩種方式,一種是在XML配置bean時指定init-method,另外一種方式是bean實現InitializingBean介面。

舉個栗子:

import org.springframework.beans.factory.InitializingBean;

public class TestInitializingBean implements
InitializingBean{ @Override public void afterPropertiesSet() throws Exception { System.out.println("測試 InitializingBean"); } public void testInit(){ System.out.println("測試 init-method"); } }

 配置檔案:

<bean id="testInitializingBean" class
="com.TestInitializingBean" ></bean>

測試程式碼:

@Test
public void test() {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}

測試結果:

測試 InitializingBean

這說明在spring初始化bean的時候,如果該bean實現了InitializingBean介面,會自動呼叫afterPropertiesSet方法。

 

那麼問題來了,在配置bean的時候使用init-method配置也可以為bean配置初始化方法,那這兩個哪個會先執行呢,接下來測試一下。

配置檔案:

<bean id="testInitializingBean" class="com.TestInitializingBean" init-method="testInit"></bean>

測試結果:

測試 InitializingBean
測試 init-method

從結果可以看出,在Spring初始化bean的時候,如果該bean實現了InitializingBean介面,並且同時在配置檔案中指定了init-method,系統則是先呼叫afterPropertieSet()方法,然後再呼叫init-method中指定的方法。

總結:

1、當我們要在bean例項完成後執行自定義初始化方法時,Spring提供了兩種方式,一種是在XML配置bean時指定init-method,另外一種方式是bean實現InitializingBean介面,兩種方式可以同時使用。

2、實現InitializingBean介面是直接呼叫afterPropertiesSet方法,比通過反射呼叫init-method指定的方法效率要高一點,但是init-method方式消除了對Spring的依賴。

3、如果呼叫afterPropertiesSet方法時出錯,則不呼叫init-method指定的方法。