0

それで、私がそれを説明することを考えた最良の方法は、例を使うことでしょう。

サービスXを公開する場合は、そのインスタンスを1つ登録する必要があります。その同じインスタンスは、多くのクライアントがそれを呼び出すのと同じように答えます。

オンデマンドでそのインスタンスの多くをインスタンス化する方法があるかどうか疑問に思いました。クライアントc1がインスタンスx1の下でサービスXを要求するように、クライアントc2はインスタンスx2と通信し、処理後に各インスタンスが破棄されます。

Webサーバーで動作するため。各クライアントメソッド呼び出しは要求であり、応答後、その要求は破棄されます。

私は複数の参照についていくつかの答えを見ましたが、それらがすべて私が持っているのと同じ質問であるかどうかはよくわかりませんでした。

ありがとうございました

4

2 に答える 2

1

数年前、RFC 正規サービス ファクトリで一般的な方法でこの質問に答えようとしました。よく考えた結果、解決策は非常にシンプルだという結論に達しました。ファクトリーサービスを登録するだけです。したがって、Foo を作成できるようにしたい場合は、FooFactory サービスを登録するだけです...これにより、パラメーター、型の安全性などのすべての機能を利用できます。一般的なソリューションが必要な場合は、Factory 型を作成するだけです。

public interface Factory<T> { T create(); }

@Component
public class FooFactoryImpl implements Factory<Foo> {
  public Foo create() { ... }
}

ただし、最も良い方法は FooFactory を作成することであることがわかりました。これにより、ジェネリック型はキャストが必要になる傾向があるため、型の安全性がずっと得られるからです。また、拡張性、パラメーター、およびセマンティクスの適切なドキュメントのほとんどを提供します。

私が知っている他のすべてのソリューションは、重いキャストと型システムのバイパスに悩まされる傾向があります。Declarative Services のファクトリ コンポーネントは、その一例です。OSGiサービスレジストリの責任は、あなたにハンドルを与えることだと思います。すべてのテクノロジーと同様に、セマンティクスを追加することは非常に魅力的です。これは、OSGi よりも Java に任せたほうがよいケースだと思います。複雑にしないでおく。

于 2013-01-25T10:13:33.357 に答える
0

OSGi は現在、ServiceFactoryをサポートしています。これにより、プロバイダーは各コンシューマー バンドルに対して一意のサービス インスタンスを作成できます。これはあなたのニーズには十分かもしれません

ただし、プロバイダがバンドル内のサービスに対する各リクエストに対して一意のサービス インスタンスを提供することはできません。私は、リクエストごとに一意のサービス インスタンスを作成できるようにする R6 の提案に取り組んでいます。願わくば、R6 仕様に受け入れられることを願っています。

于 2013-01-24T22:54:16.143 に答える