My favorites | Sign in
Google
                
Search
for
Updated Mar 02, 2009 by limpbizkit
ProviderBindings  

Provider Bindings

When your @Provides methods start to grow complex, you may consider moving them to a class of their own. The provider class implements Guice's Provider interface, which is a simple, general interface for supplying values:

public interface Provider<T> {
  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<TransactionLog> {
  private final Connection connection;

  @Inject
  public DatabaseTransactionLogProvider(Connection connection) {
    this.connection = connection;
  }

  public TransactionLog get() {
    DatabaseTransactionLog transactionLog = new DatabaseTransactionLog();
    transactionLog.setConnection(connection);
    return transactionLog;
  }
}

Finally we bind to the provider using the .toProvider clause:

public class BillingModule extends AbstractModule {
  @Override
  protected void configure() {
    bind(TransactionLog.class)
        .toProvider(DatabaseTransactionLogProvider.class);
  }

If your providers are complex, be sure to test them!


Sign in to add a comment