サービスは、独立したモジュール間の接続です。モジュールを(仕様パッケージとともに)サービスに依存させることで、モジュール間の結合を大幅に減らすことができ、モジュール性の利点の多くを提供できます。
シングルトンパターンは2つの異なる方法で使用されると思います。1つのオブジェクトを一連のユーザー間で共有するだけにするか(たとえば、ログサービス)、実際には1つのインスタンスしか持てない(たとえば、ハードウェアが1つしかない)。一般的に、エンタープライズソフトウェアの世界のほとんどの人が前者について話していると思います。ただし、経験によれば、プロジェクトが成長すると、シングルトンはシングルトンではなく共有オブジェクトになるか、少なくとも共有オブジェクトのように見えます。OSGiの優れた点は、両方をモデル化でき、「シングルトン」のクライアントがそれを認識せず、中央構成を必要としないことです。その理由は、OSGiが担当のモジュールに依存しているためです。サービスの登録は、サービスをリッスンしているのと同様に、ローカルでの決定です。
サービスの力はそのダイナミクスにはありません(ただし、特に開発中はクールです)。サービスの本質は、中央構成なしでモジュール内の完全なローカル制御を提供することです。これがどれほど強力であるかを理解したら、戻る方法はありません:-)
最後に、注釈付きのDSがあるので、OSGiサービスは面倒ではありません。サービスの登録は、Spring Bean、xml、中央構成を作成するよりもはるかに簡単になりました。
// A component registered as a ISingleton service
@Component
public class MyImpl implements ISingleton {
void doSingle() { ... }
}
// A component that uses the ISingleton component
@Component
public class MyConsumer {
@Reference
void setISingleton(ISingleton is) { ... }
}
...そしてダイナミクスは主に無料で提供されます...