@Providesメソッド
「オブジェクトを生成する」といったコードが必要な場合には、@Providesメソッドを使う。 このメソッドはモジュール内で定義され@Providesアノテーションを持つことが必要である。 メソッドの返り値はバインディングされたタイプである。 インジェクタは、このタイプのインスタンスが必要になると、そのメソッドを呼び出す。
public class BillingModule extends AbstractModule { @Override protected void configure() { ... } @Provides TransactionLog provideTransactionLog() { DatabaseTransactionLog transactionLog = new DatabaseTransactionLog(); transactionLog.setJdbcUrl("jdbc:mysql://localhost/pizza"); transactionLog.setThreadPoolSize(30); return transactionLog; } }
@Providesメソッドに@PayPalや@Named("Checkout")のようなアノテーションがつけられている場合は、Guiceはそのタイプにバインドする。 依存性はメソッドのパラメータとして与えられる。 インジェクタはメソッド起動前にそれぞれのバインディングを使う。
@Provides @PayPal CreditCardProcessor providePayPalCreditCardProcessor( @Named("PayPal API key") String apiKey) { PayPalCreditCardProcessor processor = new PayPalCreditCardProcessor(); processor.setApiKey(apiKey); return processor; }