Spring中對InitializingBean接口的使用

這幾天做項目看到同組的大牛用到了Spring中的InitializingBean接口實現初始化加載,這裏做下記錄。在Spring中凡是實現了InitializingBean接口的類在初始化加載時都會實現以下方法。

public class TestInitlizationBean implements InitializingBean {
	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("TestInitlizationBean......");
	}
}

我們可以在配置文件中做如下測試(環境基於之前章節搭建的Spring源碼環境),

spring-config.xml文件中

<bean id = "test" class="TestInitlizationBean">	</bean>

   MyConfClass.java中   

@Configuration
public class MyConfClass {

	public static void main(String[] args) {
 		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
	}
}

輸出結果:

這說明在spring初始化bean的時候,如果bean實現了InitializingBean接口,會自動調用afterPropertiesSet方法。

同樣,spring中提供了init-method爲bean配置初始化方法,那麼他們先後順序會怎麼樣呢

修改spring.xml配置如下

<beans>
	<bean id="test" class="TestInitlizationBean" init-method="initMehtod">
	</bean>
</beans>

TestInitlizationBean如下:

public class TestInitlizationBean implements InitializingBean {

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

	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("TestInitlizationBean....afterPropertiesSet");
	}
}

輸出結果:

可以看到InitializingBean的afterPropertiesSet方法先於init-method 方法執行。

在Spring源碼中究竟是如何運行的呢,讓我們來一探究竟。

查看AbstractAutowireCapableBeanFactory類中的invokeInitMethods方法

綜上:

1、Spring爲bean提供了兩種初始化bean的方式,實現InitializingBean接口,或指定init-method方法,兩種方式可以同時使用。

2、實現InitializingBean接口是直接調用afterPropertiesSet方法,init-method是通過反射方式實現。

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