私のライブラリのコードでは、後で.を使用してインスタンス化するために、JAXBを使用してXMLファイルからクラス名をロードしますClass.forName()
。ケースを説明するための架空の例:
public void libraryMethod() throws Exception {
List<String> classNames = loadClassNamesFromXML();
for (String className : classNames) {
Class.forName(className).newInstance().doThings();
}
}
現在、一部のユーザーはOSGiを使用してアプリケーションを構成し、XML構造を使用して構成するクラスとは異なるクラスローダーを使用してライブラリをロードします。これは、クラスが見つからないため、ロードが失敗する可能性があることを意味します。
そのようなクラスをロードするためのより信頼できる方法はありますか?または、これらのインスタンスを構成する他の方法はありますか?私はこれをもたらす提案を受け入れています:
public void libraryMethod() throws Exception {
// Spring does things like this:
List<SomeType> instances = loadInstancesFromXML();
for (SomeType instance : instances) {
instance.doThings();
}
}
いくつかの制約:
- ライブラリの観点からは、これらのインスタンスのライフサイクルは重要ではありません。彼らが(ユーザー)状態を持っている場合、私のライブラリは気付かないでしょう。
- このライブラリでは物事をシンプルに保ちたいので、たとえばSpringなどの構成フレームワークに外部依存関係を作成することは避けたいと思います。したがって、私は標準のJDK6+ディストリビューションで実現できるソリューションにのみ興味があります。
- 単純なXML構成ファイルを保持したいと思います(XML構造に少し変更しても問題ありません)。