2016-09-06 5 views
0

私はプロジェクトの設定について少し興味があります。CDIがjarファイル間に具体的な依存関係を挿入する

私は更新しようとしているプロジェクトを持っています。

私は@ Named( "")アノテーションを使って具体的なクラスのいくつかを紹介しました。 このクラスは、実際にはインタフェースを実装する抽象クラスを継承しています。 名前付きクラスを、そのjarに含まれていないクラスに挿入したいとします。 これを行う際に留意すべき点は何ですか?

答えて

1

あなたの質問は非常に曖昧ですので、この回答が詳細を気絶させるとは思わないでください。

このクラスは、実際にはインターフェイスを実装する抽象クラスを拡張しています。

これは問題ではありません。最終的なBeanインスタンスは、階層内のすべてのクラスとインタフェースのタイプを持ちます。何も心配する必要はありません。

名前付きクラスを、そのjarに含まれていないクラスに挿入したいとします。

まず、別のBeanにのみBeanを挿入できます。つまり、他のクラス(同じ瓶に入っていないクラス)がBeanになる必要があります。このために、他のアーカイブ内のCDIを有効にし、希望のスコープでクラスに注釈を付けます。

第2に、もう1つのジャーは、@Named豆に依存していなければならず、CDIコンテナはそれらの豆を見ることができます。

最後に、豆に適切なスコープを使用してください。スコープは特定のコンテキストに属し、それぞれのライフサイクルは異なります。例えば、@ApplicationScopedの場合、Beanはアプリの起動時からシャットダウンまで生きていますが、@RequestScopedはHTTPリクエスト中にのみアクティブです。

+0

入力いただきありがとうございます。あなたは正しいです、それはあいまいな質問でした。私はCDIとその能力の初心者です。あなたが望むスコープでクラスに注釈をつけると言うとき、私はそれをNamed()注釈で注釈しました。 CDIコンテナの範囲はどのように機能しますか? AplicationScopeは、jvmの起動シャットダウンとHTTPリクエストごとのRequestedScopedの両方から生きていると言います。両方の豆に注釈を付ける必要はありますか? – SoftwareSavant

+0

[http://weld.cdi-spec.org/documentation/](documentation)]をご覧ください。あなたの質問については、 '@ Named'はBeanに任意のスコープを与えません。その目的はそれを作ることです[http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_el_name]( ELからアクセス可能)。 '@ Named'アノテーションのみを持つBeanは、デフォルトで' @ Dependent'スコープを持ちます。次の注記では、 '@ ApplicationScoped'は** CDIコンテナの起動**(CDIが起動して魔法が起き始める時点)からシャットダウンまでです。また、 '@ Dependent'があなたのために十分であれば、豆に注釈を付ける必要はありません。 – Siliarus

+0

CDIコンテナでスコープがどのように機能するかについては、それぞれのライフサイクルが異なり、そのライフサイクルが終了すると、それにリンクされたBeanは破棄されます。 '@ RequestScoped' Beanのリクエスト後などです。新しいリクエストがポップアップすると、新しいBeanが取得されます。 '@ SessionScoped'がどのように機能するかを推測できるはずです。 '@ ConversationScoped'と' @ Dependent'は難しいかもしれませんが、私は(再び)Weldのドキュメントを提案しています。独自のスコープを定義することもできます。 – Siliarus

関連する問題