【问题标题】:Accessing the Global object in play! 2.0 with Java访问游戏中的全局对象! 2.0 与 Java
【发布时间】:2012-04-19 22:54:39
【问题描述】:

我已经扩展了 GlobalSettings 类,如教程Application global settings 中所示。

然后我如何访问这个类的实例,比如说从一个视图方法? 我假设在应用程序启动时创建了一个实例,并且它可能是某个对象的成员。

我本来希望在这里找到它:

Play.application().getGlobalSettings()

或类似的东西,但我在 Play.* 层次结构中的任何地方都找不到它。

有什么想法吗? 谢谢。

【问题讨论】:

    标签: java playframework-2.0


    【解决方案1】:

    我是 Play 2.0 的新手,但是,我认为使用插件注入会更好地为您服务。看看这个:

    https://github.com/typesafehub/play-plugins/tree/master/inject

    使用这种方法,您只需将以下行添加到您的控制器(以及其他一些配置,如上面的链接中所述):

    @Inject static MyStaticObj obj;
    

    其余的都是使用注入框架自动完成的。无需担心全局等问题。

    也就是说,和你一样,在发现插件注入框架之前,我花了很多时间试图弄清楚如何使用 GlobalSettings 对象。

    我的感觉是,鉴于 Global 是如何实现的(作为默认/未命名包中的类),不可能在应用程序代码的任何地方引用它。我不确定这是有意为之还是偶然的(似乎 Play 的人最近在考虑 Scala 很多......)。幸运的是,插件方法似乎是处理这些共享全局变量的更好方法。

    【讨论】:

    • 谢谢,我什至不知道有玩插件这样的东西......但是自从使用这个插件后,无论如何我都会得到一个单例模式,为什么不自己做呢?与我自己的单例实现相比,使用这个插件有什么优势?
    【解决方案2】:

    直接引用全局对象即可。 例如不要写:

    public class Global extends GlobalSettings {}
    

    object Global extends GlobalSettings {}
    

    object Global extends Global {}
    class Global extends GlobalSettings {}
    

    您可以在代码中的任何位置引用全局对象,只需编写:

    Global.someMethod()
    

    【讨论】:

    • 那是斯卡拉吗?我不知道这种形式。这是否意味着该实例不能从任何 Play 参考中获得?
    • 这是 Scala 代码。我不确定你将如何在 Java 中做到这一点。
    • 谢谢,但我正在寻找一个 java 解决方案,对我来说有很多新东西,所以我现在宁愿使用尽可能少的 scala。目前我只使用 Singleton 模式,但我真的希望找到更好的解决方案。
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多