使用Play Framework在应用程序启动时在Controller中实例化变量

时间:2016-08-18 16:09:41

标签: java api playframework dependency-injection server

我通过Play Framework使用Java来实现API。我试图在应用程序的开头实例化一些变量,这些变量应该持续应用程序的整个生命周期并且将在我的HomeController中使用。 这些变量是可用于从特定类调用函数的对象。

我已经读过,实现在应用程序启动时执行的代码的最佳方法是使用Dependency Injection,但我不明白该怎么做。

您能否澄清一下如何做到这一点?

谢谢。

2 个答案:

答案 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)

您可以在Play中找到更多依赖注入的herehere

获得想法之后,应该很容易实现。 要定义一个对象,应该持续整个应用程序的整个生命周期:

  1. 使用@Singleton注释定义类(此类对象):

    @Singleton  
    public class MyClass4AppLifecycle {  
        public MyClass4AppLifecycle() {  
           ...
        }
        .... 
    }
    
  2. 使用@Inject注释添加到控制器的数据成员:

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

    注意:既然你提到了几个对象,成员注入注释似乎更合适,那就是构造函数注释。

  3. 在默认模块中注册依赖注入类(这是最简单的方法):

    public class Module extends AbstractModule {  
        @Override  
        protected void configure() {  
            bind(MyClass4AppLifecycle.class).asEagerSingleton();
        }  
    } 
    
  4. 对于您需要全局的每种类型重复上述三项

相关问题