我通过Play Framework使用Java来实现API。我试图在应用程序的开头实例化一些变量,这些变量应该持续应用程序的整个生命周期并且将在我的HomeController中使用。 这些变量是可用于从特定类调用函数的对象。
我已经读过,实现在应用程序启动时执行的代码的最佳方法是使用Dependency Injection,但我不明白该怎么做。
您能否澄清一下如何做到这一点?
谢谢。
答案 0 :(得分: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
希望有所帮助
答案 1 :(得分:2)
获得想法之后,应该很容易实现。 要定义一个对象,应该持续整个应用程序的整个生命周期:
使用@Singleton注释定义类(此类对象):
@Singleton
public class MyClass4AppLifecycle {
public MyClass4AppLifecycle() {
...
}
....
}
使用@Inject注释添加到控制器的数据成员:
public class MyController extends Controller {
@Inject
private MyClass4AppLifecycle myGlobalObject;
...
注意:既然你提到了几个对象,成员注入注释似乎更合适,那就是构造函数注释。
在默认模块中注册依赖注入类(这是最简单的方法):
public class Module extends AbstractModule {
@Override
protected void configure() {
bind(MyClass4AppLifecycle.class).asEagerSingleton();
}
}
对于您需要全局的每种类型重复上述三项