我想知道以下问题的最佳做法是什么:
我想要某个类的 2 个实例(特别是 BlockingQueue)将它们注入到我的其他类中。这些实例中的每一个都是单独配置的(特别是它们具有不同的容量),并且它们不支持通过 @Inject 注释进行自动注入。这 2 个实例是应用程序中该类的唯一 2 个实例。
现在,我知道我可以使用绑定注释来区分两个实例,并使用实例绑定来实际绑定到单个实例。但问题是我还需要配置这两个对象,我想从 Guice 获取配置依赖。您认为最好的方法是什么?
一种选择是使用@Provides 绑定
在您的 guice 模块中创建一个提供依赖项的方法。您可以在方法签名中添加构造对象所需的依赖项。
@Provides
@MyBindingAnnotation
@Singleton
BlockingQueue<String> provideBlockingQueue(MyGuiceManagedConfig config){
return new LinkedBlockingQueue<String>(config.getCapacity());
}
...并且它们不支持通过 @Inject 注释自动注入
顺便说一句,Guice 有一个称为构造函数绑定的特性,它可以在没有的情况下绑定构造函数@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);
}