原文链接: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);
...
}