gpt4 book ai didi

java - 使用 Guice 注入(inject) Map 的值

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:33 27 4
gpt4 key购买 nike

我有一个 Guice注入(inject)几个其他服务的托管服务。其他服务的使用取决于传递给我的服务方法的键值。所以我想做一个 Map将要使用的服务映射到相应的 key :

@Inject
private IServiceA serviceA;

@Inject
private IServiceB serviceB;

private Map<String, IService> mapping;

private Map<String, IService> getMapping() {
if (mapping == null) {
mapping = new HashMap<String, IService>();
mapping.put("keyA", serviceA);
mapping.put("keyB", serviceB);
}
}

@Override
public void myServiceMethod(String key) {
IService serviceToUse = getMapping().get(key);
// ... use some methods of the identified service
}

这个解决方案有效但看起来很笨拙,因为我必须对映射进行延迟初始化。我尝试使用 static block ,但此时 Guice 尚未初始化实例成员。

我更喜欢直接用 Guice 注入(inject)映射值,但我不知道如何实现。

最佳答案

只需使用 MapBinder ,例如

protected void configure() {
MapBinder<String, IService> mapBinder
= MapBinder.newMapBinder(binder(), String.class, IService.class);
mapBinder.addBinding("keyA").to(IServiceA.class);
mapBinder.addBinding("keyB").to(IserviceB.class);
}

然后你注入(inject)整个 map ,例如

public class IServiceController {
@Inject
private Map<String, IService> mapping;
}

关于java - 使用 Guice 注入(inject) Map 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com