18

私はこれについて多くの分点コードを読みましたが、それでも日食の分点設定でosgiバンドルのクラスローダーを取得するためのハッキーでない方法を理解することはできません。ありますか?

4

4 に答える 4

39

OSGi 4.3では、以下を使用できます。

bundle.adapt(BundleWiring.class).getClassLoader()
于 2013-03-07T19:59:27.970 に答える
11

簡単な答え(確かにOSGi 4.1の場合、4.2は不明)は、バンドルのクラスローダーを取得できないということです。ただし、BundleインターフェースはloadClass()メソッドを公開します。これにより、バンドルAPIをラップし、そのloadClass()メソッドに委任するクラスローダーを作成できます。または、時間を節約して、代わりにSpringDMのBundleDelegatingClassLoaderクラスを使用することもできます。

于 2009-10-01T13:42:03.463 に答える
6

バンドルのクラスローダーは、BundleWiringインターフェイスを介して取得できます。ここに短い例があります:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
于 2013-10-15T07:04:17.737 に答える
2

通常のJavaコードでは、特定のオブジェクトをロードしたクラスローダーを取得できます。

object.getClass().getClassLoader();

またはただ

SomeType.class.getClassLoader();

同じことがEquinoxにも当てはまります。関心のあるバンドルに由来するオブジェクトまたはタイプを使用するだけです。

于 2009-10-02T02:44:16.027 に答える