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