如何使用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
}
}
}
在我的控制器操作中,我尝试按名称调用变量,但它不起作用。
答案 0 :(得分: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")
}
然后在你的控制器中使用它:
println(globals.abc)
globals.someActor ! SomeMessage
<强>更新强>