English 中文(简体)
Guice:为共有特许证创造动力
原标题:Guice: Creating Injectors for Shared Libs

新到谷歌古冰。 我愿利用这一方法处理我正在开发的三个组成部分的所有IoC和AOP方法拦截:

  • WidgetClient - a Swing app
  • WidgetServer - a small EAR that the client will connect to/communicate with
  • WidgetShared - a "commons" JAR that contains common classes used by both client and server

我在有些地方发出明确呼吁,如:

public static void main(String[] args) {
    initGuiceInjectors();
}

private static initGuiceInjectors() {
    Guice.createInjector(mySwingAppModule);
}

<代码>mySwingAppModule将界定对Swaing apps Dependencies的所有约束力。 我将在国际航空服务器中做一些非常相似的事情。

关于<代码>共享植被的图书馆,I m choking,因为校正没有一个单一的切入点:它只是一个包件、班级、接口和垫子,客户和服务器将全部使用。

因此,我的第一个问题:,在我援引<条码>时,请上>>。 JAR?

这个问题突显了第二个(相似)问题,因此我也选择在这里讨论这个问题。

我阅读了Guices的“最佳做法”,绝大多数共识似乎是(在适用的情况下)在一揽子一级保持<代码>Module 执行。 因此,每一揽子方案都将有一个<代码>模块的混合物,其中界定了所有类型的约束力。 这与单一单一单一语言的<代码>Module相比有所改进,该编码界定了整个附件的约束力。

因此,上述法典(Guice.create Injector(mySwingAppModule)实际上是而不是,我的法典最终将照搬(sorry Iude!”)。

我的第二个问题是:,什么是创造多种注射器的“最佳做法”?

见<代码>createInjector(模块......)可采用varargModule。 因此,在我看来,如果我接受“1-module-per- Pack”最佳做法的话,那么,在某个时候,我必须制定这样的守则:

Guice.creatorInjector(package1Module, package2Module, package3Module,
    package4Module, package5Module, package6Module, ..., packageNModule);

或如上:

Guice.createInjector(package1Module);
Guice.createInjector(package2Module);
Guice.createInjector(package3Module);

...

Guice.createInjector(packageNModule);

这两点都确实是新生! 是否有更好的办法实现这一目标?

提前感谢!

问题回答

Adam,

你们的问题有两个内容,但两者显然都有关系。 首先从第二个因素开始,我回头。

每个包裹都有一个单元很重要,因为它提供了一个可预测的公约,其中应规定有约束力,而且作为一种奖金,它使你能够相应地保护你的班级。 还有一个普遍的概念,即建立综合模块,主要负责安装每组模块,作为单一模块,需要安装,以增加对某个图书馆组合的约束力。 这一单一模块的安装成为图书馆与使用该模块的服务器/应用程序之间的主要整合点。

回到你的第一点,它不建议每申请有多个注射器。 最好是有一个单一注射器安装模块,以满足其使用的所有约束力。

最后,你们有:

public WidgetSharedLibraryModule extends AbstractModule {
  @Override protected void configure() {
    install(new WidgetSublibraryModule1());
    install(new WidgetSublibraryModule2());
    ...
  }
}

你们的主要方法就是:

public static void main(String[] args) {
    Injector injector = Guice.createInjector(
        new WidgetSharedLibrary(),
        new WidgetSwingAppModule());
    WidgetSwingApp app = injector.getInstance(WidgetSwingApp.class);
    app.run();
}




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签