13

如何使用 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
    }
  }

}

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

4

1 回答 1

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

更新

此后,文档已更新如何添加Global.scala惯用的 Play!方式,带有ScalaJava的文档。

于 2012-06-19T07:10:56.347 回答