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

Java 如何让Google Guice自动检测绑定?,java,dependency-injection,guice,Java,Dependency Injection,Guice,我了解如何使用GoogleGuice注入单个依赖项。 以下代码段来自Guice站点 要对配置进行编码,代码如下 public class BillingModule extends AbstractModule { @Override protected void configure() { bind(TransactionLog.class).to(DatabaseTransactionLog.class); bind(CreditCardProcessor.clas

我了解如何使用GoogleGuice注入单个依赖项。 以下代码段来自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本身实现。

您可以将BillingService作为一个接口并绑定它的不同实现在运行时根据模块的配置方法决定。

在什么情况下会有不同的实现?由哪个实体决定?也许让我们说行为必须改变,我们不会再部署。提供方法是一个很好的选择。当没有规则应用时,业务规则将硬编码在带有默认实现的提供方法中。。。这将是一个很好的答案。请记住,
configure()
在创建喷油器时只运行一次。如果绑定只定义了一次,请在
configure
中选择它,但如果在初始配置后它可能会更改,则可能必须将其放入提供程序或@Provides方法中。如果选择取决于某些业务参数,该怎么办?