0

OSGI におけるコンポーネントとサービスという用語を理解する上で、1 つの疑問があります。私はApache Felixフレームワークを使用しています。コンポーネントがサービスを提供するこのリンクhttp://wiki.osgi.org/wiki/Declarative_Services#Providing_Servicesを読みました。しかし、コンポーネントがインターフェイスよりもサービスを提供する場合、私はそれを理解できませんでしたか? 私の意見では、インターフェースはコンポーネントによって実装されるサービスです。

もう1つの疑問は、別のバンドルが他のバンドルのサービスを使用したい場合、それがどのように行われるかということです? インターフェイス(サービス)またはコンポーネント(実装クラス)を使用します。

サービスとコンポーネントの 2 つの用語と、scr 表記との関係をよりよく理解できるように、疑問を解消してください。

4

1 に答える 1

1

物事の名前が時々不明確であることは間違いありません。Felix と Equinox の命名にはいくつかの小さな違いもあります。

宣言型サービス:

OSGiのサービスは、サービス レジストリに登録されたオブジェクトです。コンポーネントにすることもできますが、好きなオブジェクトにすることもできます。

Componentはオブジェクトの具体的なインスタンスであり、宣言型サービス コンテナーによって管理されます。コンテナがクラスのインスタンス化に使用できる実装クラスを提供する必要があります。

それだけで十分な場合もあります。すべての参照が存在する場合、このオブジェクトはインスタンス化され、必要に応じてアクティブ化/非アクティブ化メソッドが呼び出されます。

他のコンポーネントが使用できるように OSGi サービスとしても登録する場合は、次のことを行う必要があります。

  1. 提供したいサービスのインターフェースを実装する
  2. そのインターフェースでサービスとして登録することを示します

本当に必要な場合は、実装クラスを提供サービスとして登録できますが、インターフェイスを使用する方が適切に分離できます。

コンポーネントで別のサービスを使用するには、それを参照する必要があります。OSGi wiki で、そのセクションが欠落しているようだと述べています。このブログはそれを非常によく説明しています。

よろしく、フランク

于 2013-04-01T17:43:13.503 に答える