java - Guice 跨模块注入(inject)以实现共享

标签 java module guice

我在 Guice 中有三个模块:

  • ReflectionsModule,用于提供元数据(通过 Reflections)
  • PersistenceModule,用于数据访问对象和其他
  • WebModule,用于 Web 内容

简单地说,PersistenceModule 和 WebModule 都会获取由 Reflections Module 生成的对象。我找不到一种非常友好的方式来做到这一点。

我认为 PrivateModules 将是一个合适的方法,但我不确定如何实现。有什么想法吗?

谢谢。

一些其他详细信息

我正在使用反射。它基本上是一个从静态资源加载持久性元数据的包装器。所以基本上假设将解析后的 XML 文件转换为 JavaBean。这就是 ReflectionsModule 关心的问题。

从这个元数据到 javabean,我需要设置持久性(它是一个 Google App Engine 应用程序,使用 Objectify)并加载其他类并绑定(bind)它们,同时读取其中的一些注释。我不想加载资源,所以我想引用第一个示例中加载的资源。

现在,ReflectionsModule 还绑定(bind)了两个后续模块,我(正确地)得到了它们,并将它们应用到仅使用第一个模块构建时出现的 createChildInjector 。就像现在的操作系统一样,它可以工作。我只是想知道哪种方式是最好的。

最佳答案

简单来说,PrivateModule 只公开使用 .expose() 方法的 @Exposed 注释显式公开的绑定(bind)。因此,如果PersistenceModule和WebModule都是PrivateModule,您可以执行以下操作:

public class WebModule extends PrivateModule {
  @Override
  public void configure() {
    install(new ReflectionsModule());
    // do stuff...
    expose(SomeClassFromWebModule.class);
  }
}

public class PersistenceModule extends PrivateModule {
  @Override
  public void configure() {
    install(new ReflectionsModule());
    // do stuff...
    expose(SomeClassFromPersitenceModule.class);
  }
}

通过这种方式,来自 ReflectionsModule 的绑定(bind)将不会比两个 PrivateModule 暴露得更远,因此不会相互冲突。

仅公开只能由一个模块提供的类通常是一种很好的做法。

关于java - Guice 跨模块注入(inject)以实现共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078671/

相关文章:

java - 如何在 JNI 中将 int 转换为 String(?)?

java - ArrayIndexOutOfBoundsException 的原因

python - 如何获取当前模块中某个类的所有实例

java - 如何让Jersey实例化并管理生命周期并让Guice执行注入(inject)

java - 以太坊区 block 链,带有用于非支付应用程序的java api

java - 如何将从表头生成的工具提示添加到我的 JTable 单元格?

python - 没有名为组合的模块(来自 import wx.combo) - pyspread

Java模块: Have access to a access to an object but unable to create the object

java - guice bean 初始化中的长时间操作

java - Guice测试类是否已经创建