§Playモジュールの作成
注意: このページでは、Playに新しい機能を追加するための新しいモジュールシステムについて説明します。
非推奨の
play.Plugin
システムは、2.5.x以降削除されました。
モジュールは、任意の依存性注入フレームワークを使用して作成できます。ただし、Playを拡張する場合は、依存性注入に依存しないように、特定のフレームワークへの依存を避ける必要があります。Playは以前、この目的のためにplay.Plugin
システムを使用していましたが、2.5.xでは、プラグインはPlayモジュールに置き換えられました。
Playモジュールは、play.inject.Module
を拡張するクラスであり、特定の依存性注入フレームワークに明示的に依存することなく、Playに登録できます。これにより、誰もがPlayモジュールを使用できるようになります。
Playモジュールのリストは、モジュールディレクトリで入手できます。
さらに、Playは組み込み機能にPlayモジュールを使用しているため、組み込み機能を置き換えたり強化したりするには、Playモジュールを使用する必要があります。
§Playモジュールの作成と移行
Playモジュールの作成は簡単です
public class MyApi {}
public class MyModule extends play.inject.Module {
public List<Binding<?>> bindings(Environment environment, Config config) {
return Collections.singletonList(bindClass(MyApi.class).toSelf());
}
}
詳細については、プラグインからモジュールへの「モジュールクラスの作成」セクションを参照してください。
§モジュールの登録
デフォルトでは、Playはルートパッケージ(「app」ディレクトリ)で定義されたModule
という名前のクラスをロードするかreference.conf
またはapplication.conf
内で明示的に定義できます。
play.modules.enabled += "modules.MyModule"
詳細については、移行ページと依存性注入ドキュメントを参照してください。
§アプリケーションライフサイクル
モジュールは、play.inject.ApplicationLifecycle
インターフェースをシングルトンインスタンスに注入し、シャットダウンフックを追加することで、Playのシャットダウンが発生したタイミングを検出できます。
詳細については、ApplicationLifecycle
の例とApplicationLifecycleリファレンスを参照してください。
§Playモジュールのテスト
Playモジュールは、Playの組み込みテスト機能を使用して、GuiceApplicationBuilder
を使用し、モジュールにバインディングを追加することでテストできます。
Application application = new GuiceApplicationBuilder().bindings(new MyModule()).build();
詳細については、Guiceを使用したテストを参照してください。
§既存のPlayモジュールのリスト表示
Modules.locate(env, conf)
メソッドは、アプリケーションで利用可能なすべてのPlayモジュールのリストを表示します。対応するJavaクラスはありません。
§組み込みモジュールのオーバーライド
Playがオーバーライドする必要がある組み込みモジュールを提供している場合があります。
たとえば、WSClient機能は、WSClientインターフェースによって実装され、AhcWSClientProviderによってサポートされています。WSClient
を拡張する代替クラスMyWSClient
を作成する場合、次のようにバインドできます。
public class MyWSModule extends play.inject.Module {
public List<Binding<?>> bindings(Environment environment, Config config) {
return Collections.singletonList(
bindClass(WSClient.class).toProvider(MyWSClientProvider.class));
}
}
§オーバーライドのテスト
アプリケーションのテストは、既存の実装を置き換えるためにoverrides
メソッドを使用して行う必要があります。
Application application = new GuiceApplicationBuilder().overrides(new MyWSModule()).build();
§登録のオーバーライド
AhcWSModule
はreference.conf
に自動的にロードされるため、最初にデフォルトモジュールを無効にする必要があります。その後、代替モジュールを追加します。
play.modules.disabled += "play.libs.ws.ahc.AhcWSModule"
play.modules.enabled += "modules.MyWSModule"
Playモジュールを公開するときに、reference.conf
で既存のモジュールを無効にしないでください。予期しない結果が生じる可能性があります。詳細については、移行ページを参照してください。
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、お気軽にプルリクエストを投稿してください。質問や共有するアドバイスがありますか? コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。