You are not allowed to do newaccount on this page. Login and try again.

Clear message
Locked History Actions

guice/Manual/UserGuide/Bindings/LinkedBindings

リンクバインディング

リンクバインディングは、タイプを実装にマップする。 この例ではTransactionLogインターフェースをDatabaseTransationLog実装にマップしている。

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

さて、injector.getInstance(TransactionLog.class)と呼び出したり、あるいはインジェクタがTransactionLog依存を見つけたりすると、そこでDatabaseTransactionLogが使われる。 リンクは、あるタイプのサブタイプも可能である、実装クラスや拡張クラスといったものである。 コンクリートなDatabaseTransactionLogをそのサブクラスにリンクすることも可能だ。

訳注:インターフェースを実装クラスにマップすることだけができるわけではなく、要するにどのような型でもマップ元に指定できるということ。

    bind(DatabaseTransactionLog.class).to(MySqlDatabaseTransactionLog.class);

リンクバインディングはチェーンすることもできる。

public class BillingModule extends AbstractModule {
  @Override 
  protected void configure() {
    bind(TransactionLog.class).to(DatabaseTransactionLog.class);
    bind(DatabaseTransactionLog.class).to(MySqlDatabaseTransactionLog.class);
  }
}

この場合、TransactionLogが要求されると、インジェクタはMySqlDatabaseTransactionLogを返す。