最初の背景:
私は、OSGI ベースで Apache Felix で実行されるApache Slingに基づく webapp プロトタイプ コードに取り組んでいます。OSGI については、まだほとんどの概念を把握していると思いますが、まだ比較的新しいものです。しかし、私を困惑させているのは、「完全な」依存性注入 (DI) フレームワークを見つけることができなかったことです。Declarative Services (DS) を使用して基本的な DI をうまく採用しました。しかし、私の理解では、DS は参照に使用されています。これをどのように表現すればよいでしょうか? -- OSGI は、サービスとコンポーネントを一緒に登録しました。そのためには問題なく動作しますが、私は個人的にGuiceのような DI フレームワークを使用して、オブジェクト グラフ全体を結び付け、オブジェクトを正しいスコープに配置します (考え@RequestScoped
たり、@SessionScoped
例えば)。ただし、私が調べた OSGI 固有のフレームワークはどれも、この概念をサポートしていないようです。
私はOSGI ブループリントとiPOJOについて読み始めましたが、これらのフレームワークは、完全な DI ソリューションを提供することよりも、OSGI サービスを結び付けることに関心があるようです。私はまだサンプルを作成していないので、私の印象は間違っている可能性があることを認めなければなりません.
Guice の拡張機能としてPeaberryを試してみましたが、ドキュメントを見つけるのが非常に難しく、基本的な DI が機能する一方で、多くの guice-servlet の高度な機能 (フィルター、サーブレットなどへの自動注入) は機能しませんでした。まったく機能しません。
だから、私の質問は次のとおりです。
- 宣言型サービスは、Guice や Spring などの「従来の」DI と比べてどうですか? それらは同じ問題を解決しますか、それとも異なる問題を対象としていますか?
- 私がこれまで見てきたすべての OSGI 固有のソリューションには、DI のスコープの概念がありません。たとえば、Guice + guice-servlet にはリクエスト スコープの依存関係があり、Web アプリケーションを非常にクリーンで簡単に作成できます。ドキュメントでそれを見逃しただけですか、それともこれらの懸念はこれらのフレームワークのいずれでもカバーされていませんか?
- JSR 330とOSGIベースの DI は 2 つの異なる世界ですか? たとえば、iPOJO は独自の注釈を提供しますが、Felix SCR 注釈はまったく別の世界のようです。
- OSGI ベースのシステムと DI を構築した経験のある人はいますか? 多分githubのサンプルコードでさえありますか?
- Guice と iPOJO のような異なるテクノロジーを一緒に使っている人はいますか?
かなり長い質問で申し訳ありません。
フィードバックは大歓迎です。
アップデート
スコープ インジェクション: スコープ インジェクションは、特定のライフサイクルのオブジェクトを自動的にインジェクトするための便利なメカニズムです。たとえば、一部のコードは、サーブレット フィルターの一部として作成された Hibernate セッション オブジェクトに依存しているとします。依存関係をマークすることにより、コンテナはオブジェクト グラフを自動的に再構築します。たぶん、それにはさまざまなアプローチがありますか?
JSR 330 対 DS : あなたのすべての優れた回答から、これらは 2 つの異なるものであることがわかります。OSGI コンテキストで使用される場合、JSR 330 アノテーションを使用するサード パーティのライブラリとフレームワークをどのように扱うかという問題が生じます。良いアプローチは何ですか?バンドル内で JSR 330 コンテナーを実行していますか?
すべての回答に感謝します。とても役に立ちました。