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;