Guice-overview

提供:Dev Guides
移動先:案内検索

Google Guice-概要

Guiceは、オープンソースのJavaベースの依存性注入フレームワークです。 これは軽量であり、Googleによって開発および管理されています。 この章では、Guiceフレームワークの概要を説明します。

依存性注入

すべてのJavaベースのアプリケーションには、連携して動作し、エンドユーザーが動作しているアプリケーションと見なすものを提示するオブジェクトがいくつかあります。 複雑なJavaアプリケーションを記述する場合、アプリケーションクラスは他のJavaクラスから可能な限り独立している必要があります。これにより、これらのクラスを再利用し、ユニットテスト中に他のクラスとは独立してテストできるようになります。 依存性注入(またはワイヤリングと呼ばれることもあります)は、これらのクラスを接着し、同時にそれらを独立した状態に保つのに役立ちます。

テキストエディタコンポーネントを備えたアプリケーションがあり、スペルチェックを提供したいと考えています。 標準コードは次のようになります-

public class TextEditor {
   private SpellChecker spellChecker;

   public TextEditor() {
      spellChecker = new SpellChecker();
   }
}

ここで、TextEditorとSpellCheckerの間に依存関係が作成されていることに注意してください。 制御の反転シナリオでは、代わりにこのようなことをします-

public class TextEditor {
   private SpellChecker spellChecker;

   @Inject
   public TextEditor(SpellChecker spellChecker) {
      this.spellChecker = spellChecker;
   }
}

ここでは、TextEditorはSpellCheckerの実装について心配するべきではありません。 SpellCheckerは独立して実装され、TextEditorのインスタンス化時にTextEditorに提供されます。

Guiceを使用した依存性注入(バインディング)

依存性注入は、Guice Bindingsによって制御されます。 Guiceはバインディングを使用して、オブジェクトタイプを実際の実装にマップします。 これらのバインディングはモジュールとして定義されます。 モジュールは、以下に示すようにバインディングのコレクションです-

public class TextEditorModule extends AbstractModule {
   @Override
   protected void configure() {
     /*
 *Bind SpellChecker binding to WinWordSpellChecker implementation
        * whenever spellChecker dependency is used.
      */
      bind(SpellChecker.class).to(WinWordSpellChecker.class);
   }
}

インジェクタはオブジェクトグラフビルダであり、モジュールはそのコアビルディングブロックです。 したがって、最初のステップは、インジェクターを作成し、インジェクターを使用してオブジェクトを取得することです。

public static void main(String[] args) {
  /*
 *Guice.createInjector() takes Modules, and returns a new Injector
     * instance. This method is to be called once during application startup.
   */

   Injector injector = Guice.createInjector(new TextEditorModule());
  /*
 *Build object using injector
  */
   TextEditor textEditor = injector.getInstance(TextEditor.class);
}

上記の例では、TextEditorクラスオブジェクトグラフはGuiceによって構築され、このグラフにはTextEditorオブジェクトとその依存関係がWinWordSpellCheckerオブジェクトとして含まれています。