如何使用guice将此映射注入bean?

问题描述 投票:0回答:1

我正在尝试注入一个在我的类中使用某些静态常量初始化的映射。

但是,由于我是Guice的新手,我无法继续前进,我不确定如何使用这张地图?我要注入的地图是:

在MyClass中映射> MyMap。

我为MyInjectedMap写了一个包含MyMap的类,它也将被构造。我写了一个模块并在那里绑定这个类。但这不起作用。

public class MyInjectedMap {

    private Map<String, List<String>> MyMap = new HashMap<>();

    private List<String> data = Arrays.asList("abc");

}

我想用我制作的数据数组列表填充MyMap。我想问一下,需要在这个类中编写哪种方法,以便它为我提供注入的MyMap?

java guice
1个回答
1
投票

您将要将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;

https://github.com/google/guice/wiki/ProviderBindings

© www.soinside.com 2019 - 2024. All rights reserved.