2016-08-18 26 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. 添加到所述控制器的數據成員with @Inject annotation:

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

    注意:由於您提到了幾個對象,因此成員注入註釋看起來更合適, r註釋。

  3. 您註冊類的默認模塊依賴注入(這是最簡單的方法):上述三個每種類型,你需要有全球

public class Module extends AbstractModule { 
    @Override 
    protected void configure() { 
     bind(MyClass4AppLifecycle.class).asEagerSingleton(); 
    } 
} 
  • 重複

  • 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)並選擇注入吉斯注射器

    實施的一個例子是在這裏:https://dzone.com/articles/guicing-play-framework

    希望它有幫助

    相關問題