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

如何让谷歌吉斯自动检测绑定?

文增
2023-03-14

我知道如何使用谷歌Guice注入一个单一的依赖。以下片段来自Guice网站。

要编写配置代码,代码将是

public class BillingModule extends AbstractModule {
  @Override 
  protected void configure() {
    bind(TransactionLog.class).to(DatabaseTransactionLog.class);
    bind(CreditCardProcessor.class).to(PaypalCreditCardProcessor.class);
  }
}

使用要注入的依赖项的组件如下所示:

class BillingService {
  private final CreditCardProcessor processor;
  private final TransactionLog transactionLog;

  @Inject
  BillingService(CreditCardProcessor processor, 
      TransactionLog transactionLog) {
    this.processor = processor;
    this.transactionLog = transactionLog;
  }

  public Receipt chargeOrder(PizzaOrder order, CreditCard creditCard) {
    ...
  }
}

最后,客户端代码将使用Guice在需要时注入依赖项:

public static void main(String[] args) {

    Injector injector = Guice.createInjector(new BillingModule());

    BillingService billingService = injector.getInstance(BillingService.class);
    ...
  }

我的问题是:

Guice中是否有一个内置特性,不仅可以注入BillingService.class还可以在运行时注入另一个不同的实现?

我认为我可以通过反射或一些手动机制(如读取配置文件以指示注入哪个类)来实现不同类的变体,但我仍然想知道这是否可以从Guice本身完成。

共有1个答案

祁乐邦
2023-03-14

您可以将计费服务设置为一个接口,并在模块的配置方法中绑定在运行时决定的不同实现。

 类似资料:
  • 我是谷歌API的新手。最近,我使用了Google Vision API,但遇到了以下问题: 我尝试了“创建服务帐户”的解决方案,以生成服务json键并在py中调用它。脚本,它将在几乎3~4个url中首先工作,但在下一个url中会出错。这是我的检测代码: 我在另一个py中调用“detect.py”。脚本:

  • 我在实施辅助注射时遇到了错误。 辅助注射一直有效,直到我引入了另一个名为管理器的类,它依赖于辅助类。经理想要使用代码在构建喷油器图时中断。它没有更进一步。 直觉上,我理解当对象A得到帮助时,那么B(依赖于A)实际上也通过A得到了隐含的帮助。 请注意,我检查过了。我想像ColinD这样的人肯定知道答案如何使用Guice的AssistedInject?如何将辅助注入类绑定到接口? 出于好奇,有没有好的

  • 我对谷歌云存储(GCS)一无所知。 这是我的场景。 我为我的应用程序用户创建一个GCS,以上载他们的媒体文件。所有用户无需登录Google帐户即可上传到GCS,但需要我的应用程序中经过身份验证的用户。并通过客户端浏览器上传至地面军事系统(无服务器代码)。 阅读文档后,部分让我困惑。 OAuth 2.0身份验证(必需的谷歌帐户) 有人能给我解释一下2号和3号吗?尤其是3号,因为它让我 这让我不知道如

  • 我正在尝试使用Flask和MySQL在Google App Engine标准环境中设置Web应用程序。 我知道Google App Engine能够根据所需的性能动态扩展其实例,但我不确定如何为我的MySQL服务器执行此操作。 对于MySQL连接,我尝试连接到Google Cloud SQL。我知道这对于单个实例是如何工作的,但我想知道是否可以连接多个实例,从而允许在使用相同数据的同时动态扩展存储

  • 问题内容: Jenkins版本:1.429 Git插件版本:1.1.12 我无法获取Git插件来克隆Git存储库。它因错误而失败 克隆的Git存储库位于本地网络上。我已经尝试了以下 阅读Git插件文档,尤其是有关状态码的部分 反斜杠以使用UNIX样式的路径 作为UNC路径(而不是名为的映射驱动器)访问了源存储库 强迫詹金斯使用没有空格的路径(修改) 确保git可执行文件在PATH上 强制Windo

  • 从这里引用:https://www.ampproject.org/docs/get_started/about-amp.html AMP是一种为快速呈现的静态内容构建网页的方法。运行中的放大器由三个不同部分组成: AMP超文本标记语言 AMP JS AMP CDN AMP HTML是一种HTML,它对可靠的性能有一些限制,并对在基本HTML之外构建丰富内容有一些扩展。AMP JS库确保AMP HT