在我們現(xiàn)在系統(tǒng)的代碼中,存在很多類似的代碼,這個接口大家都應該認得,是spring預留的接口
在所有的bean加載完畢后執(zhí)行。
/**
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception {
1. 從其他系統(tǒng)加載數(shù)據(jù)
2.如果加載失敗,直接拋異常,系統(tǒng)不啟動
}
在這個過程中,如果被加載的系統(tǒng)掛掉了,這個系統(tǒng)暫時就啟動不了。
其實這是系統(tǒng)間的一種依賴,這樣就要求系統(tǒng)A啟動之后,系統(tǒng)B才能啟動,1,2個系統(tǒng)還好說,如果系統(tǒng)多
了系統(tǒng)的啟動順序就比較難以控制,發(fā)布的難度就會增大(當然,系統(tǒng)的啟動順序不只光跟這個有關系)。
大家這樣做的目的無非有(大家也可以補充):
1.性能方面的問題,某些數(shù)據(jù)相對來說是不經常變化的,當前系統(tǒng)只有很少一部分模塊會使用這部分數(shù)據(jù),
只需要系統(tǒng)啟動的時候,到其他系統(tǒng)取一遍,放到內存中,減少遠程調用的次數(shù);
2.當前系統(tǒng)確實需要依賴另外一個系統(tǒng)的數(shù)據(jù),如果沒有這部分數(shù)據(jù),系統(tǒng)將無法進行后續(xù)的業(yè)務;
對于第二種情況,確實是需要這樣做的,如果是第一種情況,我們可以這樣做
系統(tǒng)數(shù)據(jù) a = null;
if(null == a){
a = 系統(tǒng)B的查詢結果
}
return a
如果有2個系統(tǒng),這樣做的話,單純對第一種情況來說,這個2個系統(tǒng)是可以同時啟動的,從一定程度上
降低了系統(tǒng)間的依賴;但是如果在啟動時加載的話,就必須第一個系統(tǒng)成功的啟動起來。