如何使用Play Framework 2.0创建全局变量

wyn*_*nch 12 scala playframework playframework-2.0

如何使用Scala在Play Framework 2.0中创建全局对象/变量?

我想创建一个曾经实例化的对象,可以在多个控制器动作之间保持不变,这样不同的动作仍然可以调用同一个对象(因为初始化对象非常昂贵).

这可能不存储到数据库中吗?我尝试将对象粘贴到onStart方法的Global对象中,如下所示:

http://www.playframework.org/documentation/2.0/ScalaGlobal

这是我的代码:

(在根应用程序文件夹中)

object Global extends GlobalSettings {

  override def onStart(app:Application) {
    var foo = new Foo
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

在我的控制器操作中,我尝试按名称调用变量,但它不起作用.

opy*_*ate 15

如果您的全局变量也需要可用于方法Global,请将它们放在Global.scala中,如下所示:

package object globals {
  lazy val abc = Play.maybeApplication.flatMap(_.configuration.getString("abc")).getOrElse("default_value_of_abc")
  lazy val someActor = Akka.system.actorOf(Props[SomeActor], name = "someActor")
}
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中使用它,如下所示:

println(globals.abc)
globals.someActor ! SomeMessage
Run Code Online (Sandbox Code Playgroud)

UPDATE

文档已经更新了如何添加Global.scala一个惯用的Play!方式,使用ScalaJava的文档.

  • 你知道如何在 Java 中做到这一点吗? (2认同)