gpt4 book ai didi

java - 使用 guice 构造函数参数注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:15 25 4
gpt4 key购买 nike

这是一个与其他有关构造函数参数的已回答问题略有不同的问题(或者至少我是这么认为的,当然我可能是错的)。因此,我使用 MapBinder 来存储一堆实现,然后在运行时根据某些标准选择一个实现。这是一些代码:

public interface MessageService {
void send();
}

public class FacebookMessageService implements MessageService {
private final String name;

@Inject
public FacebookMessageService(String name) {
this.name = name;
}

public void send() {
System.out.println("Sending message via facebook service to " + name);
}
}

public class MessageModule extends AbstractModule {
@Override
protected void configure() {
MapBinder<String, MessageService> mapBinder = MapBinder.newMapBinder<.....>
mapBinder.addBinding("facebook").to(FacebookMessageService.class);
}
}

public class MessageClient {
@Inject
Map<String, MessageService> map; //Mapbinder being injected

public void callSender() {
Injector injector = Guice.createInjector(new MessageModule());
injector.injectMembers(this);

MessageService service = map.get("facebook");
service.send();
}
}

我无法弄清楚如何使用 name 参数获取 FacebookMes​​sageService?如果我将 AssistedInjectFactory 一起使用,那么我无法弄清楚如何将实现注入(inject)到 MapBinder 中。

最佳答案

您可以注入(inject)“name”参数。

public class FacebookMessageService implements MessageService {
private final String name;

@Inject
public FacebookMessageService(@Named("facebookServiceName") String name) {
this.name = name;
}
}

public class MessageModule extends AbstractModule {
@Override
protected void configure() {
// bind the "facebookServiceName"
// I think this binding should exist before the map binding
bindConstant().annotatedWith(Names.named("facebookServiceName"))
.to("insert your argument here");

MapBinder<String, MessageService> mapBinder = MapBinder.newMapBinder<.....>
mapBinder.addBinding("facebook").to(FacebookMessageService.class);
}
}

在 FacebookMes​​sageService 构造函数中放置一个调试点以查看其是否有效。

关于java - 使用 guice 构造函数参数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30922992/

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