当前位置: 首页 > 知识库问答 >
问题:

使用Guice绑定基于输入参数的类实例

魏翔
2023-03-14

我有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();
}

我有另一个spec builder方法:

ModelClientSpec<DownstreamService1Client> spec = ModelClientSpec.builder(DownstreamService1Client.class);

以上规范可用于创建客户端:

DownstreamService1Client client = context.getResourceClient(spec);

可用于调用下游客户端获取数据:

ContentData data = client.getContentData(); // get the data from downstream service.

我创建了以下客户端规范静态映射:“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动态绑定特定客户机是一种干净的方法吗?

谢谢!

共有1个答案

夏季萌
2023-03-14

我想,Multibindings,特别是mapbinder可以用来实现您所要的目标。将您的客户端绑定到一个映射,注入它并通过键从该映射获取特定的实现。

 类似资料:
  • 我试着写一个小函数,它接受两个列表,并根据另一个列表的元素对一个进行排序。所以类似于: 将产生一个排序列表。 然而,可能是一个不同的列表,比如整数、浮点数或其他列表。理想情况下,我希望我的程序能够获取我抛出的任何列表,根据

  • 我正在开发一个基于JAX-RS的Java应用程序,使用Google Guice进行依赖注入。我的代码中有以下接口: 在上面的接口中,Lock是一个定义如下的接口: 锁接口由以下类实现: LockProvider接口由以下类实现: 除了LockProvider之外,我不希望应用程序中的类知道底层锁项,这就是为什么我没有在lock接口中包含getUnderlyingLockItem。 现在,当我尝试将

  • 问题内容: 标准对象工厂可能如下所示: 是否可以设置绑定以便为我完成切换,即我要做的就是调用getInstance或inject?我当时在看辅助注射,但这似乎是另外一个话题:https : //code.google.com/p/google- guice/wiki/AssistedInject 问题答案: 听起来您正在寻找,这是多重绑定功能的一部分。请注意,您仍然需要放入某种工厂接口或其他工厂接

  • 问题内容: 我正在尝试使函数采用可扩展的多个类之一,并在其Class中返回该对象的新实例,而不是的新实例。 我确定这是一个常见问题。有没有好的例子? 我从未使用过一个类作为输入参数,只使用了一个类的成员。根据我的搜索,这应该可行吗? 问题答案: 您是将对象作为参数传递还是作为的子类传递? 在这两种情况下,解决方案都几乎相同,您可以在Class对象上使用newInstance方法。 如果需要构造函数

  • 我有一组验证器类,它们都扩展了一个公共抽象类,它们都具有相同的构造函数 我想要Guice的能力 < li >知道如何构造所有这些验证器,将相同的数据源注入所有这些验证器中 < li >使用多绑定器将所有验证器注入到一个类中 通过一些谷歌搜索,看起来我可以使用,但问题是如果我想这样做,我必须为每个验证器创建一个工厂,这是一个巨大的样板。因为他们都有相同的构造函数,我觉得一定有更好的方法。我的对象是在

  • 我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?