1. 程式人生 > >Spring載入完畢時,初始化引數

Spring載入完畢時,初始化引數

三種方式:1、實現org.springframework.beans.factory.InitializingBean介面。

該介面實現其afterPropertiesSet方法,InitializingBean可以注入相關的service,如果在Spirng處理InitializingBean時出錯,那麼Spimport ring將直接丟擲異常。
程式碼如下:

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.symdata.common.core.LogUtils;
import cn.symdata.payment.liandong.LianDongConfig;
@Component
public class TestInit implements InitializingBean {
	
	@Autowired
	private LianDongConfig  config;

	@SuppressWarnings("rawtypes")
	@Override
	public void afterPropertiesSet() throws Exception {
		LogUtils.info(this.getClass(), "TestInit", "");
	 
	}

}



2、使用@Autowired註解

@Autowired加在方法上,可以在spring載入完畢時自動執行,並且可以將用到的引數,自動注入

程式碼如下:

	@Autowired
	public void initFieldsValue(LianDongConfig config) {
		LogUtils.info(this.getClass,"initFieldsValue","");
	}




//引數LianDongConfig 可以自動注入
3、配置init-method屬性:在需要進行操作的bean的xml定義中加上init-method屬性,指定下啟動時執行哪個方法

init-method是通過反射執行的,而afterPropertiesSet是直接執行的。所以 afterPropertiesSet的執行效率比init-method要高,不過init-method消除了bean對Spring依賴。在實際使用時我推薦使用init-method。

    需要注意的是Spring總是先處理bean定義的InitializingBean,然後才處理init-method。如果在Spirng處理InitializingBean時出錯,那麼Spring將直接丟擲異常,不會再繼續處理init-method。

    如果一個bean被定義為非單例的,那麼afterPropertiesSet和init-method在bean的每一個例項被建立時都會執行。單例 bean的afterPropertiesSet和init-method只在bean第一次被例項時呼叫一次。大多數情況下 afterPropertiesSet和init-method都應用在單例的bean上。