我想知道以下问题的最佳做法是什么:
我想要一些类的实例(特别是BlockingQueue)将它们注入我的其他类。这些实例中的每一个都是单独配置的(特别是它们具有不同的容量),并且它们不支持通过@Inject注释自动注入。这2个实例是应用程序中该类的唯一2个实例。
现在,我知道我可以使用绑定注释来区分这两个实例,并使用实例绑定实际绑定到单个实例。但问题是我还需要配置这两个对象,并且我想从Guice获取配置依赖性。您认为最好的方法是什么?
答案 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);
}