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

时间:2014-02-24 00:17:58

标签: java dependency-injection guice

我了解如何使用Google 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本身完成。< / p>

1 个答案:

答案 0 :(得分:1)

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