如何让Guice将带注释的注入绑定到单个实例

时间:2012-03-06 11:34:54

标签: java dependency-injection guice

我有一个UI组件,将在应用程序中的多个UI模块中使用。

我想将要注入一个UI模块中的其他几个类的UI组件注释为单例,而不是整个应用程序中的单例。因此,对于每个UI模块使用UI组件,只使用一个UI组件实例。

我无法从Guice文档中找到直接的解决方案。所以我想也许我可以使用注释来区分那些实例? 在模块A中,我用Named("ModuleA")注释UI组件的所有注入;在模块B中,Named("ModulaB")。在配置中,我尝试使用类似的东西:

this.bind(UIComponentA.class)
    .annotatedWith(Names.named("ModulaA"))
    .to(UIComponentAImpl.class).in(Singleton.class);

this.bind(UIComponentA.class)
    .annotatedWith(Names.named("ModulaB"))
    .to(UIComponentAImpl.class).in(Singleton.class);

因为UICompoenetAImpl也需要注入,所以我不能简单地在那里创建实例。完全不确定这是否有效。

我想知道实现这一目标的标准方法是什么?

2 个答案:

答案 0 :(得分:1)

另一个选择可能是为每个模块使用child injector

这将允许您在每个模块中绑定UIComponentA的差异实例。将它们绑定在子进样器而不是父进程中。然后,您需要确保所有模块的依赖项都是从正确的子注入器构建的,可能是通过确保从正确的位置加载每个模块的根目录。

答案 1 :(得分:0)

  
    

因为UICompoenetAImpl也需要注入,所以我不能简单地在那里创建实例。

  

我认为你可以在那里创建UIComponentAImpl并绑定到Instance。当你这样做时 - 其他bean将被注入UIComponentAImpl。请参阅我的示例here