用guice中的地图初始化mapbinder

时间:2019-05-23 04:48:25

标签: guice

我正在尝试将地图作为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}}吗?

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"));