Provider Bindings

当@Provides注解过的方法可以称之为Provider,因为它们其实在内部是实现了一个叫Provider的接口:

public interface Provider<T> {
  T get();
}

每一个方法在Guice内部都是Provider的一个实现类,因此我们也可以去实现Provider来实现binding:

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;
  }
}

最后我们需要使用.toProvider来将binding放进Guice map

public class BillingModule extends AbstractModule {
  @Override
  protected void configure() {
    bind(TransactionLog.class)
        .toProvider(DatabaseTransactionLogProvider.class);
  }
}
Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-05-30 15:31:27

results matching ""

    No results matching ""