Binding 使用guice绑定不同的地图

Binding 使用guice绑定不同的地图,binding,guice,Binding,Guice,我的文件中有一个地图,如: workflowProperties1 = { "key1" : "value1"; "key2": "value2"; }; workflowProperties2 = { "key1" : "value1"; "key2": "value2"; }; 我想使用guice将此映射注入类的构造函数中。我正在做一些类似于: @Inject public myClass(@Named("workflowProperties1") Map<String,Strin

我的文件中有一个地图,如:

workflowProperties1 = { "key1" : "value1"; "key2": "value2"; };

workflowProperties2 = { "key1" : "value1"; "key2": "value2"; };
我想使用guice将此映射注入类的构造函数中。我正在做一些类似于:

@Inject public myClass(@Named("workflowProperties1") Map<String,String> someMap) { }
@注入公共myClass(@Named(“workflowProperties1”)映射someMap){

有人能建议我如何基于静态参数值在myClass中注入上述两个映射(WorkflowProperties 1或WorkflowProperties 2)中的一个吗?

您可以创建一个具体的类

public class WorkFlowProperties {

  Map<String, String> someMap;

  public Map<String, String> getSomeMap() {
    return someMap;
  }

  public void setSomeMap(Map<String, String> someMap) {
    this.someMap = someMap;
  }
}

其中
WorkFlowProperties 2
WorkFlowProperties 2
WorkFlowProperties
的实例,可以使用
.yml
配置或任何其他绑定进行配置。

可以使用解决方案。请注意,多绑定不包含在核心GUI中,因此您需要对
com.google.inject.extensions:Guice多绑定
有额外的依赖关系

然后您可以定义绑定模块,类似这样(实际上,您将从文件中提取key/value-s):

@覆盖
受保护的void configure()
{
MapBinder wf1Binder=MapBinder.newMapBinder(
活页夹(),
String.class,
String.class,Names.named(“workflowProperties1”);
wf1Binder.addBinding(“WF1Key”)。到Instance(“WF1Value”);
MapBinder wf2Binder=MapBinder.newMapBinder(
活页夹(),
String.class,
String.class,Names.named(“workflowProperties2”);
wf2Binder.addBinding(“WF2Key”).toInstance(“WF2Value”);
}
然后,您可以根据要求“基于静态参数值”轻松注入正确的映射,例如:

private static final String STATIC_PARAMETER_VALUE = "workflowProperties1";

@Inject
@Named(STATIC_PARAMETER_VALUE) 
Map<String,String> someMap;
private static final String static_参数_VALUE=“workflowProperties1”;
@注入
@命名(静态参数值)
地图;地图;

具有映射定义的文件是什么?是否应该使用方法“toInstance()”而不是“to()”进行绑定?“to()”函数应为类类型
@Override
protected void configure()
{
    MapBinder<String, String> wf1Binder = MapBinder.newMapBinder(
                    binder(), 
                    String.class, 
                    String.class, Names.named("workflowProperties1"));

    wf1Binder.addBinding("WF1Key").toInstance("WF1Value");

    MapBinder<String, String> wf2Binder = MapBinder.newMapBinder(
                    binder(), 
                    String.class, 
                    String.class, Names.named("workflowProperties2"));

    wf2Binder.addBinding("WF2Key").toInstance("WF2Value");
}
private static final String STATIC_PARAMETER_VALUE = "workflowProperties1";

@Inject
@Named(STATIC_PARAMETER_VALUE) 
Map<String,String> someMap;