gpt4 book ai didi

java - 如何让 Google Guice 自动检测绑定(bind)?

转载 作者:行者123 更新时间:2023-12-01 13:21:43 26 4
gpt4 key购买 nike

我了解如何使用 Google Guice 注入(inject)单个依赖项。以下片段来自 Guice 网站。

要编写配置代码,代码为

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

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

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 在需要的地方注入(inject)依赖项:

public static void main(String[] args) {

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

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

我的问题是:

Guice 中是否有内置功能,不仅可以在运行时注入(inject)(例如)BillingService.class,还可以在运行时注入(inject)另一个不同的实现?

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

最佳答案

您可以将 BillingService 设为一个接口(interface),并绑定(bind)在运行时在 Module 的配置方法中决定的不同实现。

关于java - 如何让 Google Guice 自动检测绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976642/

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