原文鏈接:https://github.com/google/guice/wiki/GettingStarted
Getting Started
在DI中春瞬,objects在構(gòu)造器中獲取自己的依賴汰蓉。為了構(gòu)造一個object,首先需要建立起它的依賴關(guān)系档址。但是這是一個循環(huán)浴滴,為了建立一個依賴运翼,你需要找到這個依賴的其他依賴菌羽。所以當(dāng)你真的需要構(gòu)造一個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來構(gòu)建一個BillingService晴及。Guice使用binding來映射類及其實現(xiàn)的關(guān)系。一個module就是一個binding的集合掂之。
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
/*
* 這個告知Guice當(dāng)它看到有對TransactionLog的依賴時抗俄,它需要提
* 供一個DatabaseTransactionLog
*/
bind(TransactionLog.class).to(DatabaseTransactionLog.class);
/*
* 同上
*/
bind(CreditCardProcessor.class).to(PaypalCreditCardProcessor.class);
}
}
這些modules是構(gòu)成一個injector的板塊,這個injector就是 Guice的object-graph builder. 我們先生成這個injector, 然后我們就可以使用這個來構(gòu)建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);
...
}