依存関係フレームワーク Guice を使用してアプリケーションを構築しました。今度は OSGI に移り、バンドル情報を使用して jar を拡張し始めます。
私が現在直面している主な問題は、依存性注入を正しく設定する方法です。いくつかのパッケージをエクスポートするバンドル A があります。次に、バンドル B がコンポーネントを定義します。このコンポーネントには、バンドル A のオブジェクト (クラス AA) が注入される必要があります。
自動的に注入されるバンドル A のクラス AA のサービスをセットアップできますが、バンドル A がエクスポートされない可能性があるバンドル A のクラスにも依存している場合はどうなるでしょうか。エクスポートされていないため、2番目のクラスをサービスとして設定する必要がありますか?これは機能しません。
次のコードは問題を示します。
バンドル A
package test.bundleA.api
public class AA {
@Inject
public AA(AInternal someReference) {...}
}
package test.bundleA.internal
public class AInternal {...}
バンドル B:
package test.bundleB.api
public class ComponentB {
@Inject
public ComponentB(AA refToA) {...}
}
エクスポートされたパッケージのバンドル A で他のクラスを使用する場合、それぞれにサービスを設定する必要がありますか?
バンドル内およびバンドル境界を越えた依存性注入の問題を解決するための一般的なアプローチは何ですか?