2

我可以为 Play2 设置两个全局设置对象吗?

我知道 application.conf 中只有设置可用。

global=common.GlobalOne

两个全局类:

public class GlobalOne extends GlobalSettings {

  @Override
  public void onStart(Application app) {
      Logger.info("****** Set something ******");
  }

}

public class GlobalTwo extends GlobalSettings {

  @Override
  public void onStart(Application app) {
      Logger.info("****** some other ******");
  }

}

我问的原因是玩 2 个模块。如何在模块中有一个全局设置对象,以便在项目使用它时启用它?

4

4 回答 4

5

那是不可能的。GlobalSettings适用于应用程序,而不是模块。因此,模块不应定义GlobalSettings对象。

于 2012-06-03T08:52:36.073 回答
1

我使用这种方法来合并根Global.java中的多个 Global 对象:

0) 文件夹结构:

/root
    /app
        Global.java
    /conf
        application.conf
    /subprojects
        /user
            /app
                /globals
                    UserGlobal.java
        /admin
            /app
                /globals
                    AdminGlobal.java

1)将所有子项目全局类放入全局包中:

package globals;

public class UserGlobal extends GlobalSettings
{ ... }

2)将配置变量添加到所有子项目的conf文件中,如

application.global= globals.UserGlobal

3) 在根Global.java中添加私有字段和私有方法:

private List<GlobalSettings> subprojectGlobals = new ArrayList<>();

private void LoadSubprojectGlobals(Application app)
    throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
    Reflections reflections = new Reflections("globals");
    Set<Class<? extends GlobalSettings>> subprojectGlobalClasses = 
        reflections.getSubTypesOf(GlobalSettings.class);

    for(Class subprojectGlobalClass : subprojectGlobalClasses)
    {
        subprojectGlobals.add(
            (GlobalSettings)subprojectGlobalClass.newInstance()
        );
    }
}

4) 将此类代码放入根Global.java中的onStart事件处理程序中:

@Override
public void onStart(Application app)
{
    try
    {
        LoadSubprojectGlobals(app);
    }
    catch(Exception e)
    {
        new RuntimeException(e);
    }

    for(GlobalSettings subprojectGlobal: subprojectGlobals)
    {
        subprojectGlobal.onStart(app);
    }
}

现在,如果你添加一些新的子项目,你必须遵循一些关于添加 Global 类的约定,但你不需要修改任何东西来合并功能。

如果要处理更多全局设置,则需要覆盖根Global.java中的适当方法。

是我关于这个问题的问题。

于 2015-02-09T08:46:58.677 回答
0

我有一个项目拆分为 amain->frontend->commonmain->backend->common依赖项。在每个(通用、前端和后端)中,我都有一个 GlobalSetting。我需要这个来运行测试。

于 2013-04-21T11:56:53.493 回答
0

是的,这是不可能的,因为当您发出请求时,播放框架引擎会启动并且它会为当前应用程序找到 Global.java 或者如果它没有找到则可以说 Action 方法而不是跳过它。所以,底线是扩展 GlobalSettings 的类名应该是 Global.java

于 2014-05-13T05:28:07.023 回答