如何使用 guice 将此映射作为 bean 注入?
How to inject this map as a bean using guice?
我正在尝试在 class 中注入一个使用某些静态常量初始化的地图。
但是,我无法继续操作,因为我是 Guice 的新手,而且我不太确定如何使用这张地图?
我要注入的地图是:
地图> MyClass 中的 MyMap。
我为 MyInjectedMap 写了一个 class,其中包含将要构建的 MyMap。我写了一个模块并将这个 class 绑定在那里。但这是行不通的。
public class MyInjectedMap {
private Map<String, List<String>> MyMap = new HashMap<>();
private List<String> data = Arrays.asList("abc");
}
我想用我制作的数据数组列表填充 MyMap。
我想问一下,这个class需要写哪个方法,才能给我注入MyMap?
您需要将 MyInjectedMap 转换为提供程序,然后将其适当地绑定到您的模块中。假设您不希望所有地图都使用此地图,您将创建自定义注释或使用 guice 提供的@Named:
public class MyMapProvider implements Provider<Map<String,List<String>> {
private Map<String,List<String>> myMap = new HashMap<>();
public Map<String,List<String>> get() {
return myMap;
}
}
并设置注入器:
bind(new TypeLiteral<Map<String,List<String>>>(){}).annotatedWith(Names.named("MyMap")).toProvider(MyMapProvider.class);
然后注入:
@Inject @Named("MyMap") Map<String,List<String>> myMap;
我正在尝试在 class 中注入一个使用某些静态常量初始化的地图。
但是,我无法继续操作,因为我是 Guice 的新手,而且我不太确定如何使用这张地图? 我要注入的地图是:
地图> MyClass 中的 MyMap。
我为 MyInjectedMap 写了一个 class,其中包含将要构建的 MyMap。我写了一个模块并将这个 class 绑定在那里。但这是行不通的。
public class MyInjectedMap {
private Map<String, List<String>> MyMap = new HashMap<>();
private List<String> data = Arrays.asList("abc");
}
我想用我制作的数据数组列表填充 MyMap。 我想问一下,这个class需要写哪个方法,才能给我注入MyMap?
您需要将 MyInjectedMap 转换为提供程序,然后将其适当地绑定到您的模块中。假设您不希望所有地图都使用此地图,您将创建自定义注释或使用 guice 提供的@Named:
public class MyMapProvider implements Provider<Map<String,List<String>> {
private Map<String,List<String>> myMap = new HashMap<>();
public Map<String,List<String>> get() {
return myMap;
}
}
并设置注入器:
bind(new TypeLiteral<Map<String,List<String>>>(){}).annotatedWith(Names.named("MyMap")).toProvider(MyMapProvider.class);
然后注入:
@Inject @Named("MyMap") Map<String,List<String>> myMap;