簡體   English   中英

Play 2的多個全局設置

[英]Multiple Global Settings for Play 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個模塊。 如何在模塊中具有全局設置對象,以便在項目使用它時可以啟用它?

那不可能 GlobalSettings適用於應用程序,不適用於模塊。 因此,模塊不應定義GlobalSettings對象。

我使用這種方法在根Global.java中合並多個Global對象:

0)文件夾結構:

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

1)將所有子項目Global類放入globals包中:

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中覆蓋適當的方法。

是我關於這個問題的問題。

我有一個項目拆分為main->frontend->commonmain->backend->common依賴項。 在每個(通用,前端和后端)中,我都有一個GlobalSetting。 我需要這個來運行測試。

是的,這是不可能的,因為當您發出請求時,播放框架引擎將啟動並為當前應用程序找到Global.java;或者,如果找不到它,您可以說出Action方法,否則它將跳過該.So,底線是擴展GlobalSettings的類名應該是Global.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM