我有一堆处理器。有些具有相同的对象类型但具有不同的配置。我想创建一组处理器,但选择哪个处理器应放入哪个组中。是否有办法使用多重绑定来做到这一点?
public class PostProcessorModule extends AbstractModule {
public static final String TYPE_A = "TypeA";
public static final String TYPE_B = "TypeB";
@Override
protected void configure() {
Multibinder<PostProcessor> typeASet =
Multibinder.newSetBinder(binder(), PostProcessor.class, Names.named("TypeASet"));
typeASet.addBinding().to(RandomizationPostProcessor.class); // Only want Type A
here
typeASet.addBinding().to(SecondPostProcessor.class);
Multibinder<PostProcessor> typeBSet =
Multibinder.newSetBinder(binder(), PostProcessor.class, Names.named("TypeBSet"));
typeASet.addBinding().to(RandomizationPostProcessor.class); // Only want Type B
here
typeASet.addBinding().to(SecondPostProcessor.class);
}
@Provides
@Singleton
@Named(TYPE_A)
public RandomizationPostProcessor getRandomizationPostProcessorA() {
return RandomizationPostProcessor.builder()
.toRandomize(3)
.build();
}
@Provides
@Singleton
@Named(TYPE_B)
public RandomizationPostProcessor getRandomizationPostProcessorB() {
return RandomizationPostProcessor.builder()
.toRandomize(10)
.build();
}
@Provides
@Singleton
public SecondPostProcessor getSecondPostProcessor() {
return new SecondPostProcessor();
}
}
public class Test {
@Inject
@Named("TypeASet")
private final Set<PostProcessor> setA;
@Inject
@Named("TypeBSet")
private final Set<PostProcessor> setB;
public void doSomething() {
...
}
}
RandomizationPostProcessor
和 SecondPostProcessor
实现 PostProcessor
。
多重绑定支持吗?我看不到任何像
annotatedWith
或普通 bind()
函数中具有的类似函数。编写另一个函数是创建自定义集的唯一方法吗?
当然,您可以
addBinding
到特定键:
typeASet.addBinding().to(Key.get(RandomizationPostProcessor.class, Names.named(TYPE_A))
typeBSet.addBinding().to(Key.get(RandomizationPostProcessor.class, Names.named(TYPE_B))