我有一個Swing應用程序,我想從意大利麪轉換爲使用依賴注入與Guice。使用Guice來提供像配置和任務隊列這樣的服務很順利,但我現在開始使用應用程序的GUI,並且不確定如何繼續。如何在Swing應用程序中使用Guice
該應用程序基本上是一個JFrame
與JTabbedPane
中的一堆選項卡。每個選項卡都是一個獨立的JPanel
子類,用於在按下某些按鈕時,佈局各種組件並需要服務來執行操作。
在目前的應用中,這看起來有點像這樣:
@Inject
public MainFrame(SomeService service, Executor ex, Configuration config) {
tabsPane = new JTabbedPane();
// Create the panels for each tab and add them to the tabbedpane
somePanel = new SomeTabPanel(service, ex, config);
tabsPane.addTab("Panel 1", somePanel);
someOtherPanel = new SomeOtherTabPanel(service, ex, config);
tabsPane.addTab("Panel 2", someOtherPanel);
... do more stuff
}
顯然,這並不完全遵循DI最佳實踐。我不想要@Inject
這些選項卡,因爲那會給我一個帶有幾十個參數的構造函數。我希望使用Guice將所需的依賴項注入到我需要的任何選項卡對象中,而不必將所有這些依賴項都傳遞給選項卡構造函數。
所有依賴於標籤的對象是我Module
知道的服務,所以基本上所有我認爲我想要做的就是要求吉斯爲所需對象,並讓他們構建了我。
你可能想看看Guts-GUI項目(我自己);這是一個用於編寫Swing應用程序的基於Guice的框架。雖然尚未正式發佈,但目前還是可行的。 URL是:http://kenai.com/projects/guts/pages/Guts-gui – jfpoilpret 2010-04-14 02:46:31
我已經看了一下,但看起來像這將需要完全重寫應用程序。例如,我已經有了一個非常強大的任務執行系統和事件總線。該應用程序並不大(大約20kloc),但仍然足夠大,不會考慮重新開始。 – 2010-04-14 09:02:09