Guice:使用不同的配置创建多个对象实例

时间:2013-05-08 11:36:32

标签: java guice

我想知道以下问题的最佳做法是什么:

我想要一些类的实例(特别是BlockingQueue)将它们注入我的其他类。这些实例中的每一个都是单独配置的(特别是它们具有不同的容量),并且它们不支持通过@Inject注释自动注入。这2个实例是应用程序中该类的唯一2个实例。

现在,我知道我可以使用绑定注释来区分这两个实例,并使用实例绑定实际绑定到单个实例。但问题是我还需要配置这两个对象,并且我想从Guice获取配置依赖性。您认为最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

一种选择是使用@Provides bindings

在guice模块中创建一个提供依赖关系的方法。您可以添加在方法签名中构造对象所需的依赖项。

@Provides
@MyBindingAnnotation
@Singleton
BlockingQueue<String> provideBlockingQueue(MyGuiceManagedConfig config){
    return new LinkedBlockingQueue<String>(config.getCapacity());
}
  

...并且它们不支持通过@Inject注释自动注入

顺便说一句,Guice有一个名为constructor bindings的功能,可以在没有@Inject的情况下绑定构造函数:

try {
    binder().bind(Integer.TYPE).toInstance(10);

    binder().bind(new TypeLiteral<BlockingQueue<String>>() {})
        .toConstructor(LinkedBlockingQueue.class.getConstructor(Integer.TYPE));
} catch (NoSuchMethodException e) {
    addError(e);
}