最初にドキュメントを調べたときにこれを見つけられなかったのはちょっと恥ずかしかった. 完全を期すために自分の質問に答えます。
コア仕様の PDF から ...
セクション 3.9.9 - オブジェクトのバンドルの検索
バンドル コンテキストにアクセスできないコードでバンドルが必要になるシナリオがあります。このため、フレームワークには次のメソッドが用意されています。
Framework Util – getBundle(Class) メソッドを使用して FrameworkUtil クラスを介して。フレームワークは、このメソッドを提供して、クラス ローダーを取得する権限がなくても、コードがオブジェクトのバンドルを検索できるようにします。クラスがバンドルに由来しない場合、メソッドは null を返します。
クラスローダー – OSGi フレームワークは、バンドルから来るクラスのクラスローダーが BundleReference インターフェースを実装することを保証する必要があります。これにより、レガシー コードは、クラス ローダーを取得し、バンドルへのアクセスを提供する BundleReference オブジェクトにキャストすることで、オブジェクトのバンドルを見つけることができます。ただし、これには、コードにクラスローダーへのアクセス許可が必要です。次のコード フラグメントは、任意のオブジェクトから Bundle オブジェクトを取得する方法を示しています。
ClassLoader cl = target.getClassLoader();
if ( cl instanceof BundleReference ) {
BundleReference ref = (BundleReference) cl;
Bundle b = ref.getBundle();
...
}
OSGi システムでは、すべてのオブジェクトがフレームワークに属しているわけではありません。したがって、BundleReference インターフェイスを実装しないクラス ローダー (ブート クラス パス ローダーなど) を取得することができます。