導入Google Guice用DI
こんにちは、
今、私の仕方について話ししたいと考える人は多いだろうGoogle Guiceのための依存関係の射出Java. まず、フレームワークに関するいくつかの概念を紹介し、次に例を示す簡単なアプリケーションを記述します。
Dependency Injection
この記事で話したように、依存性注入(DI)は、クライアントが明示的にそれらを取得するのではなく、クライアントに依存性を提供す DIは基本的に、依存性反転原理(DIP)という名前のより一般的な目標を達成する方法です。:
実装に依存する代わりに、抽象化に依存することを好みます。
DIを適用するとき、それらを要求しているクライアントの依存関係を注入(ワイヤ、バインド)する方法が必要です。
Javaに関しては、Weld、Spring、Guiceなど、長所と短所を持つさまざまなフレームワークがあります。この記事では、Guiceを使用し、将来の記事では、おそらくSpring BootとSpring RESTを使用してRESTful Apiを設計するという文脈で、Springについて説明する予定です。
Google Guice
google Guiceは、抽象化と実装をマップできるコンテナを提供することで、依存性注入を自動化するフレームワークです。 マッピングの後、依存関係は要求されたときに自動的にクライアントに挿入されます。
Guiceでのマッピングは、comの実装によって実現されます。グーグルインジェクション通常、抽象基本クラスcomから継承することによって行われるモジュール。グーグルインジェクションAbstractModule.
その後、configureメソッドをオーバーライドし、bindメソッドとtoメソッドを呼び出してfluent APIに依存して、抽象化(bindのパラメータ)と実装(toのパラメータ)の間のマッピン次に、comで依存関係に注釈を付けることで、依存関係を注入できます。グーグルインジェクションインジェクション
最後に、comを取得する必要があります。グーグルインジェクション以前に定義したモジュールからインジェクタを取得するので、getInstanceメソッドでクライアントを取得することができ、その依存関係が自動的に注入されま
例
この例は、その操作に関するログ情報を送信するJavaシステムの一部で構成されています。 私たちのプロジェクトにGuiceを含めることを簡単にするために、mavenをビルドツールとして使用します。pomで
。バージョン4.0では、依存関係セクションにGuiceの次の成果物を追加します:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version><>
<>
インターフェイスLogSenderを作成してみましょう動作:”ある媒体にログを送信します”:
このサービスは、logsenderへの参照を持つexchangerクラスによって使用され、注入は@injectで注釈された:
実装StdoutLogSenderは、標準出力ストリーム、この場合はコンソールにログを送信します。
guiceにlogsenderをstdoutlogsenderにマップする方法を伝えるために、loggingmoduleクラスでそれを行います。
最後に、メインクラスアプリケーションで、インジェクタを作成し、loggingmoduleをそのコンストラクタに渡すことができます。 次に、LogSenderバインドに依存するExchangerのインスタンスを取得することができます。
結論
この記事では、Javaアプリケーションで依存性インジェクションタスクを自動化するためのGoogle Guiceの使い始め方に関する基本について説明しました。 私たちは、抽象化と実装の間のマッピングを定義する方法と、それらをクライアントに注入する方法を例示するための簡単なアプリケーションを書このGuiceの基本的な概要で、依存性注入と、より低いレベルの結合と高いレベルの結束を持つコードを開発する方法についての研究を続けることがで