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
では、超軽量の「DI」機構としての役割を果たしています。Bootstrapper
私が疑問に思っているのは、この設計を WAR の web.xml と EAR の server.xml に変換するにはどうすればよいかということです。
実行可能な JAR では、main
メソッドは を明示的にインスタンス化し、Bootstrapper
そのフィールド/プロパティを問い合わせることができますが、WAR/EAR では、単一の「エントリ ポイント」なしですべてが XML ファイル ( web.xml
/ ) で定義されます。server.xml
したがって、WAR または EAR で、それぞれがローカル ホスト名を知る必要がある複数のクラスがある場合、同じインスタンスを何度も何度もインスタンス化し、毎回Bootstrapper
同じものを渡す必要があります。myAppConfig.xml
web.xml と server.xml を構成して、起動/展開時に a をインスタンス化し、その場で依存クラスを自動的に注入/設定する方法があるかどうか疑問に思っていますBootstrapper
(または、少なくとも、各依存クラスを与える) XML ファイルで定義されたグローバル/シングルトンへのクラスアクセス)。Bootstrapper
前もって感謝します!