新到谷歌吉斯注射器。我想用它来处理所有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