ドキュメント

§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();

§登録のオーバーライド

AhcWSModulereference.confに自動的にロードされるため、最初にデフォルトモジュールを無効にする必要があります。その後、代替モジュールを追加します。

play.modules.disabled += "play.libs.ws.ahc.AhcWSModule"
play.modules.enabled += "modules.MyWSModule"

Playモジュールを公開するときに、reference.confで既存のモジュールを無効にしないでください。予期しない結果が生じる可能性があります。詳細については、移行ページを参照してください。

次へ:Plugins APIからの移行


このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、お気軽にプルリクエストを投稿してください。質問や共有するアドバイスがありますか? コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。