2010-04-13 37 views
3

我的任務是完成一些關於如何啓動應用程序的重構工作。基本上我們有一些控制檯應用程序,這些應用程序依賴於GUI應用程序啓動代碼,從而導致僞造依賴關係,這些依賴關係具有我們需要發佈的庫以及其他模塊需要聲明的依賴關係的啓動效果。控制PicoContainer啓動的順序

因此,我寫了一個簡單的啓動框架,我基本上只是將一堆Runnable對象放入列表中,然後按順序運行它們 - 並且工作正常。

但是我在想 - 我們已經PicoContainer的在我們的項目,所以所有這些東西,需要在啓動時運行可能被扔進PicoContainer的,如果他們實施可啓動,他們將開始...

但在某些情況下,我們想要指定它們之間的順序。例如,我們不希望任何其他組件寫入日誌,然後再向日誌中寫入一個表示應用程序正在啓動的標頭。我知道我可以通過引入注入依賴來介紹排序,但是在這種情況下,這感覺就像是黑客攻擊 - 我需要添加日誌頭文件作爲每個可能寫入日誌的其他組件的依賴項,這不是很好所有。

儘管如此,它似乎是很好的控制PicoContainer啓動順序,所以也許還有其他方式?

或者我可以保持簡單並堅持我的Runnable列表。畢竟,它的確工作。

回答

0

您的組件當前如何寫入日誌?我會希望在日誌中存在一個(picocontainer)依賴項,然後該日誌的構造函數將寫入該頭文件。 如果日誌記錄沒有被注入並且完全繞過PicoContainer,我不會帶入標題部分,我會保持這個獨立性,就像其餘的日誌記錄一樣。

+0

實際上,將啓動頭寫入記錄器的組件是一個獨立於記錄器本身的組件(單一責任原則,以及所有這些)。 – Trejkaz 2010-11-04 09:03:27

2

您無法控制默認的開始/停止順序,但您可以確定訂購自己的生命週期。

例如:

1)使具有你的界面MyStartable方法init()和延伸可比性。

2)添加容器組件MyStart,使用MyStartable的列表或數組進行初始化。

3)手動或使用標準開始啓動MyStart /停止MyStart生命週期

4)根據自然順序,你應該重寫列表/陣列只是排序。

5)上的每個MyStartable

我想有更多的「本土」的方式來做到這一點,通過生命週期管理器,但需要探索來源調用的init()。