我通過Play Framework使用Java來實現API。我試圖在應用程序的開始處實例化一些變量,這些變量應該持續應用程序的整個生命週期,並且將在我的HomeController中使用。 這些變量是可用於調用特定類中的函數的對象。使用Play Framework在應用程序啓動時在Controller中實例化變量
我已經讀過,實現在應用程序啓動時執行的代碼的最佳方式是使用Dependency Injection,但我不明白該怎麼做。
您能否澄清一下這是如何完成的?
謝謝。
我通過Play Framework使用Java來實現API。我試圖在應用程序的開始處實例化一些變量,這些變量應該持續應用程序的整個生命週期,並且將在我的HomeController中使用。 這些變量是可用於調用特定類中的函數的對象。使用Play Framework在應用程序啓動時在Controller中實例化變量
我已經讀過,實現在應用程序啓動時執行的代碼的最佳方式是使用Dependency Injection,但我不明白該怎麼做。
您能否澄清一下這是如何完成的?
謝謝。
你可以找到here和here更多e Play中依賴注入的示例。
當你明白了,應該很容易實現。 要定義一個對象,其應持續應用整個生命週期:(這樣的對象的)
定義類與@Singleton註解:
@Singleton
public class MyClass4AppLifecycle {
public MyClass4AppLifecycle() {
...
}
....
}
添加到所述控制器的數據成員with @Inject annotation:
public class MyController extends Controller {
@Inject
private MyClass4AppLifecycle myGlobalObject;
...
注意:由於您提到了幾個對象,因此成員注入註釋看起來更合適, r註釋。
您註冊類的默認模塊依賴注入(這是最簡單的方法):上述三個每種類型,你需要有全球
public class Module extends AbstractModule {
@Override
protected void configure() {
bind(MyClass4AppLifecycle.class).asEagerSingleton();
}
}
重複
有關依賴注入的示例使用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
希望它有幫助