0

OSGIでの名前で特定のクラスのクラスローダーを取得するにはどうすればよいですか?クラスは別のパッケージで宣言されており、エクスポートされない場合があります。

4

2 に答える 2

3

クラスの名前はそれを一意に識別するのに十分ではないため、これは基本的に不可能です。複数のモジュールに同じ名前のクラスが含まれている場合があります。これは、モジュールの分離を提供するモジュールシステムの必然的な特性です。

実際、「通常の」Javaでも、クラスのIDは完全修飾名とClassLoaderで構成されているため、理論的には不可能です。つまり、クラスのIDの半分を、残りの半分だけを指定して取得する方法を求めています。

どのバンドル/モジュールにクラスが含まれているかがわかっている場合は、そのバンドルBundle.loadClass("Foo")から、呼び出し可能なClassオブジェクトを使用してクラスをロードできますgetClassLoader()

于 2013-01-28T12:48:04.707 に答える
0

なぜ他のバンドルからクラスをロードしたいのですか?よりクリーンな方法は、クラスを含むバンドル内のクラスをインスタンス化し、サービスとして公開することです。または、複数のインスタンスが必要な場合は、ファクトリをサービスとして登録できます。

于 2013-01-29T09:30:29.090 に答える