新到谷歌吉斯注射器。我想用它來處理所有IOC和AOP方法攔截的三個組成部分,我發展:吉斯:創建共享庫
WidgetClient
- 一個Swing應用程序WidgetServer
- 一個小EAR客戶端將連接到/溝通WidgetShared
- 包含由客戶端和服務器
隨着Swing應用程序使用的普通班「公地」 JAR,什麼地方我會做出一個明確的調用可能看起來像:
public static void main(String[] args) {
initGuiceInjectors();
}
private static initGuiceInjectors() {
Guice.createInjector(mySwingAppModule);
}
mySwingAppModule
將定義Swing應用程序相關性的所有綁定。我將在服務器EAR中做一些非常類似的事情。
當談到WidgetShared
庫時,我很窒息,因爲lib沒有一個入口點:它只是一大堆客戶端和服務器將會使用的包,類,接口和枚舉這個地方。
所以我的第一個問題:我在哪裏調用Guice.createInjector()
爲WidgetShared
JAR?
這個問題強調了一個SEGUE到第二(類似)的問題,這就是爲什麼我選擇在這裏組爲好。
我仔細閱讀了Guice的「最佳實踐」,並且壓倒性的共識似乎是(如適用的話),在包級別保留Module
的實現。因此,對於每個包,將有該包內的所有類型的一個Module
結石定義綁定。這是針對整個應用定義綁定的單個單塊Module
的改進。
因此,上面的代碼片段(Guice.createInjector(mySwingAppModule)
)實際上是而不是我的代碼最終會看起來像什麼(對不起,我說謊!)。
我的第二個問題是:什麼是「最佳實踐」爲創建多個注射器?
我看到createInjector(Module... modules)
可以採取可變參數Module
參數。所以,對我來說好像如果我要擁抱這個「1模塊每包」最佳實踐,在某些時候,我必須有代碼,要麼是這樣的:
Guice.creatorInjector(package1Module, package2Module, package3Module,
package4Module, package5Module, package6Module, ..., packageNModule);
,或者像這樣:
Guice.createInjector(package1Module);
Guice.createInjector(package2Module);
Guice.createInjector(package3Module);
...
Guice.createInjector(packageNModule);
這兩個看起來真的很討厭!有沒有更好的方法來完成這個?!?
在此先感謝!
但是,如果我們已經一個注射器那麼我們如何把它傳遞到子模塊?換句話說,'submodule1'可能想要'submodule2'中的類的getInstance。 – DilTeam 2015-10-21 06:12:08