2016-08-18 4 views
0

私はPlay Frameworkを通じてJavaを使用してAPIを実装しています。私は、アプリケーションの開始時にいくつかの変数をインスタンス化しようとしています。この変数は、アプリケーションの全期間にわたって持続する必要があり、HomeControllerで使用されます。 これらの変数は、特定のクラスの関数を呼び出すために使用できるオブジェクトです。Play Frameworkを使用してアプリケーションの開始時にControllerで変数をインスタンシエート

私は、アプリケーションの開始時に実行されるコードを実装する最良の方法はDependency Injectionを使用することですが、その方法を理解していませんでした。

どうすればいいですか?

ありがとうございます。

答えて

2

herehereもっとe Playの依存性注入のサンプル。

アイデアが得られたら、実装するのは簡単です。

  1. は@Singletonアノテーションと(そのようなオブジェクトの)クラスを定義:

    @Singleton 
    public class MyClass4AppLifecycle { 
        public MyClass4AppLifecycle() { 
         ... 
        } 
        .... 
    } 
    
  2. コントローラにデータメンバを追加し、アプリケーションライフサイクル全体にわたって持続べきは、オブジェクトを定義する

    public class MyController extends Controller { 
        @Inject 
        private MyClass4AppLifecycle myGlobalObject; 
        ... 
    

    注:@Injectアノテーションであなたはいくつかのオブジェクトを言及したことから、メンバー注入注釈は、より適切と思われるものconstructo r注釈。

  3. (それが最も簡単な方法です)デフォルトモジュールの依存性注入のためのあなたのクラスを登録します。

    public class Module extends AbstractModule { 
        @Override 
        protected void configure() { 
         bind(MyClass4AppLifecycle.class).asEagerSingleton(); 
        } 
    } 
    
  4. あなたがグローバル

を持っている必要があり、各タイプのために上記の3を繰り返します
2

依存性注入の例は、Google Guiceを使用しています。最初は、その依存関係をbuild.sbtファイルに含めることです。

あなたは

// https://mvnrepository.com/artifact/com.google.inject/guice 
libraryDependencies += "com.google.inject" % "guice" % "4.1.0" 

を追加することによって、あなたはその後、GlobalSettings(https://www.playframework.com/documentation/2.5.x/GlobalSettings)を拡張することを選択すると、Guiceのインジェクタに

実装の一例を注入することを選択できることを行うことができますがここにあります:https://dzone.com/articles/guicing-play-framework

希望すると助かります

関連する問題