ほとんどの場合、OSGi宣言型サービスによって注入される同じクラスを持つコンポーネントがたくさんあります。これらのサービスは、すべての派生コンポーネントで同じロジックを実行するために使用されます。したがって、コードの重複を避けるために、抽象クラスを使用するのが最善です。DI参照メソッド(設定/設定解除)を抽象クラスに移動する可能性はありますか?私はBndを使用しています。
例えば:
@Component
public class B implements IA {
private ServiceC sc;
@Reference
public void setServiceC(ServiceC sc) {
this.sc = sc;
}
public void execute() {
String result = executeSomethingDependendOnServiceC();
// do something with result
}
protected String executeSomethingDependendOnServiceC() {
// execute some logic
}
}
@Component
public class D implements IA {
private ServiceC sc;
@Reference
public void setServiceC(ServiceC sc) {
this.sc = sc;
}
public void execute() {
String result = executeSomethingDependendOnServiceC();
// do something different with result
}
protected String executeSomethingDependendOnServiceC() {
// execute some logic
}
}
ServiceC
のセッターとメソッドexecuteSomethingDependendOnServiceC()
を抽象クラスに移動したいと思います。しかし、Bndアノテーションに関連するOSGiではどのように見えますか。抽象クラスのさまざまなインスタンスを作成し、@ Componentもインスタンスを作成するためA
、@Componentでクラスにアノテーションを付けるだけでは機能しません。D
誰かが同じ問題を経験し、回避策がどのように見えるかについてアドバイスをくれるかもしれません。少なくともベストプラクティスの解決策も問題ありません:)