GettingStarted

原文链接:https://github.com/google/guice/wiki/GettingStarted

Getting Started

在DI中,objects在构造器中获取自己的依赖。为了构造一个object,首先需要建立起它的依赖关系。但是这是一个循环,为了建立一个依赖,你需要找到这个依赖的其他依赖。所以当你真的需要构造一个object时,真正要做的是建立一个object graph。
手工建立object graph是个费力不讨好的活,相反,Guice可以帮你建立这个东西。但是首先,Guice需要被配置好。
为了更好的说明,还是用上一章的BillingService。为了让栗子看起来更清楚,我们添加了@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) {
    ...
  }
}

我们想用PaypalCreditCardProcessor和DatabaseTransactionLog来构建一个BillingService。Guice使用binding来映射类及其实现的关系。一个module就是一个binding的集合。

public class BillingModule extends AbstractModule {
  @Override 
  protected void configure() {

     /*
      * 这个告知Guice当它看到有对TransactionLog的依赖时,它需要提
      * 供一个DatabaseTransactionLog
      */
    bind(TransactionLog.class).to(DatabaseTransactionLog.class);

     /*
      * 同上
      */
    bind(CreditCardProcessor.class).to(PaypalCreditCardProcessor.class);
  }
}

这些modules是构成一个injector的板块,这个injector就是 Guice的object-graph builder. 我们先生成这个injector, 然后我们就可以使用这个来构建BillingService

 public static void main(String[] args) {
    /*
     * Guice.createInjector() takes your Modules, and returns a new Injector
     * instance. Most applications will call this method exactly once, in their
     * main() method.
     */
    Injector injector = Guice.createInjector(new BillingModule());

    /*
     * Now that we've got the injector, we can build objects.
     */
    BillingService billingService = injector.getInstance(BillingService.class);
    ...
  }

你可能感兴趣的:(GettingStarted)