我编写了Bootstrapper
一个从类路径读取 XML 文件的类,并且可以在运行时被其他类用作轻量级依赖注入器:
<!-- myAppConfig.xml -->
<appConfig>
<environment runningOn="LOCAL" host="localhost.example.com" system="Windows 7"/>
</appConfig>
public class Bootstrapper
{
private String runningOn = "Unknown";
private String host = "Unknown";
private String system = "Unknown";
public Bootstrapper(final String appConfigFileName)
{
setRunningOn(extractRunningOn(appConfigFileName));
setHost(extractHost(appConfigFileName));
setSystem(extractSystem(appConfigFileName));
}
public String getHost()
{
return host;
}
// Rest of class ommitted for brevity...
}
// Then in an executable JAR's main method:
public static void main(String[] args)
{
Bootstrapper bootstrapper = new Bootstrapper("myAppConfig.xml");
// Prints: "This app is running on the localhost.example.com server node."
System.out.println("This app is running on the " +
bootstrapper.getHost() + " server node.");
}
从这个意义上说appConfig
,Bootstrapper
作为超轻量级“DI”机制。
我想知道的是:如何将此设计转换为 WAR 的 web.xml 和 EAR 的 server.xml?
而在可执行 JAR 中,该main
方法显式实例化 a Bootstrapper
,然后可以查询其字段/属性,而在 WAR/EAR 中,所有内容都在 XML 文件 ( web.xml
/ server.xml
) 中定义,没有单个“入口点”。因此,在 WAR 或 EAR 中,如果我有多个类,每个类都需要知道本地主机名是什么,我将不得不Bootstrapper
一遍又一遍地实例化相同的类,每次都传递相同的内容myAppConfig.xml
。
我想知道是否有一种方法可以配置 web.xml 和 server.xml 以Bootstrapper
在启动/部署时实例化一个,并在那时和那里自动注入/填充我的依赖类(或者,至少,给每个依赖类访问Bootstrapper
XML 文件中定义的全局/单例)。
提前致谢!