我正在尝试将地图作为Bean插入我的一个课程(Helper.java
)中。我计划在绑定HelperModule
的{{1}}中创建此地图。
我相信为了将地图作为Bean注入,我需要使用Helper.java
。然后填充MapBinder
中的所有绑定,然后最终在我的课程中使用该地图。
binderOfMap
我是否必须遍历整个public class HelperModule extends AbstractModule {
@Override
protected void configure() {
log.info("Configuring the helper module.");
configureHelper();
final MapBinder<String, String> binderOfMap =
MapBinder.newMapBinder(binder(), new TypeLiteral<String> () {},
new TypeLiteral<String>() {},
Names.named("CustomMap"));
Map<String, String> myFieldsMap =
myDependency.getCustomMap(SomeConstants);
for (Map.Entry<String, String> entry: myFieldsMap.entrySet()) {
binderOfMap.addBinding(entry.getKey()).toInstance(entry.getValue());
}
private void configureHelper() {
bind(Helper.class).in(Scopes.SINGLETON);
}
}
才能添加到myFieldsMap
?或者,是否可以使用binderOfMap
初始化binderOfMap
?
此外,我现在可以在班上直接插入带有myFieldsMap
注释Map<String,String>
的{{1}}吗?
答案 0 :(得分:1)
根据MapBinder文档,只有addBinding方法在地图中添加了一个新条目,一次只能使用一个键。
要遍历myFieldsMap
,您可以使用流,例如
myFieldsMap.forEach((key, value) -> binderOfMap.addBinding(key).toInstance(value));
Helper
构造函数可以看起来像这样
@Inject
public Helper(@Named("CustomMap") Map<String, String> map) {...}
TypeLiteral表示通用类型T,对于您的情况,您可以简单地使用
MapBinder.newMapBinder(binder(), String.class, String.class, Names.named("CustomMap"));