首页 文章

如何让Google Guice自动检测绑定?

提问于
浏览
0

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

编码配置代码

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

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

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,还可以注入另一个不同的实现 in runtime

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

1 回答

  • 1

    您可以使BillingService成为一个接口,并在Module的configure方法中绑定运行时决定的不同实现 .

相关问题