Guiceを使って依存性注入を行うには以下のコードがあります。最初のものはコンストラクタインジェクションを使用し、もう1つはフィールドのすぐ上に@Inject
を追加しています。これらの2つの方法に違いはありますか? Guiceの公式サイトではコンストラクタインジェクションが推奨されるようです。コンストラクタによる注入とGuiceによるフィールド注釈による注入の違いは何ですか?
class BillingService {
private final CreditCardProcessor processor;
private final TransactionLog transactionLog;
@Inject
BillingService(CreditCardProcessor processor, TransactionLog transactionLog) {
this.processor = processor;
this.transactionLog = transactionLog;
}
...
}
そして:
class BillingService {
@Inject
private final CreditCardProcessor processor;
@Inject
private final TransactionLog transactionLog;
BillingService() {
}
...
}