[英]Class instance based on input parameter using Guice binding
我有 Java 接口类。
public interface ModelClient {
}
public interface DownstreamService1Client extends ModelClient {
public ContentData getContentData();
}
public interface DownstreamService2Client extends ModelClient {
public ContentData getContentData();
}
public interface DownstreamService3Client extends ModelClient {
public ContentData getContentData();
}
我有另一种规范生成器方法:
ModelClientSpec<DownstreamService1Client> spec = ModelClientSpec.builder(DownstreamService1Client.class);
以上规范可用于创建客户端:
DownstreamService1Client client = context.getResourceClient(spec);
可用于调用下游客户端获取数据:
ContentData data = client.getContentData(); // get the data from downstream service.
我创建了以下客户端规范 static map:“contentType”-> DownstreamClientSpec
"music" -> DownstreamClient1Spec
"books" -> DownstreamClient2Spec
...
现在我有一个处理程序方法:
public ContentData handle(String contentType) {
// need to get a client based on contentType
client = ???
return client.getContentData()
}
除了拥有 contentType 的 switch 语句和特定的客户端创建逻辑之外,如何根据 contentType 获取客户端? 使用 Guice 动态绑定特定客户端是一种干净的方法吗?
谢谢!
我想, Multibindings ,特别是MapBinder
可以用来实现你正在寻找的东西。 将您的客户端绑定到 map,注入它并通过密钥从该 map 获取特定实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.