= Providerバインディング = @Providesメソッドが複雑になりはじめると、それを独立したクラスに移動したくなる。 Guiceの提供する、シンプルで一般的なインターフェースであるProviderインターフェースを実装したクラスとすればよい。 {{{ public interface Provider { T get(); } }}} Our provider implementation class has dependencies of its own, which it receives via its @Inject-annotated constructor. It implements the Provider interface to define what's returned with complete type safety: {{{ public class DatabaseTransactionLogProvider implements Provider { private final Connection connection; @Inject public DatabaseTransactionLogProvider(Connection connection) { this.connection = connection; } public TransactionLog get() { DatabaseTransactionLog transactionLog = new DatabaseTransactionLog(); transactionLog.setConnection(connection); return transactionLog; } } }}} このプロバイダを.toProvider句に指定する。 {{{ public class BillingModule extends AbstractModule { @Override protected void configure() { bind(TransactionLog.class) .toProvider(DatabaseTransactionLogProvider.class); } }}} プロバイダが複雑な場合にはテストを忘れないこと!