我使用这种方法来合并根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中的适当方法。
这是我关于这个问题的问题。