10

オブジェクトの依存性注入に CDI/Weld を使用する Java EE アプリケーション (主に JSF 管理コンソールを備えた JAX-RS) に取り組んでいjavax.enterprise.context.ApplicationScopedます。マイナーなデバッグの問題は別として、CDI はこのプロジェクトでうまく機能しました。

ここで、CDI によって注入されたオブジェクトのライフサイクルを非常に大まかに制御する必要があります。次の機能が必要です。

  • 注入されたオブジェクトをアプリケーション コンテキストから削除する、または
  • アプリケーションコンテキスト全体を破棄/削除/クリア/リセット/削除する、または
  • @ScopeTypeContext上記の 2 つのタスクのいずれかを実行するメソッドを提供できる独自の実装を定義します。

私は、これが CDI と一般的な依存性注入の粒度に反しないとしても、それを超えていることを十分に認識しています。ただ知りたいだけです

  • これはリモートで可能ですか?
  • はいの場合、仕事を終わらせるための最も簡単/簡単/迅速/確実な方法は何ですか?
4

4 に答える 4

5

溶接リファレンス ドキュメントセクション 2.1.2

Bean がコンテキストにバインドされると、コンテキストが破棄されるまでそのコンテキストにとどまることに注意してください。Bean をコンテキストから手動で削除する方法はありません。Bean が無期限にセッションに留まらないようにする場合は、要求スコープや会話スコープなど、寿命が短い別のスコープを使用することを検討してください。

カスタム スコープの例 veiwscoped jsf 注釈を cdi に移植する

Custom スコープ タイプのパスを取得したくない場合は、BeanManager.getContextメソッドを使用して移植性のないメソッドを使用し、このコンテキストを溶接されたAbstractSharedContextにキャストして、beanstore または cleanUp( ) コンテキストのメソッド。

環境のBeanManagerインスタンスを取得する方法については、このスレッドを確認してください

于 2011-07-03T22:48:47.147 に答える
4

ニーズに合ったカスタム スコープは、 https://github.com/openknowledge/openknowledge-cdi-extensions/tree/master/openknowledge-cdi-scope/src/main/java/de/openknowledge/cdi/scopeで入手できます。たぶん、実装を少し調整する必要があります。

于 2011-08-30T02:17:04.717 に答える
1

箱から出して、ライフサイクルを完全に制御できる会話スコープのみがあります。ただし、会話がニーズに合わない場合は、独自のスコープを作成できます。スコープの作成は大変な作業ですが、コードを溶接して、会話がどのように実装されたかを確認できます。

于 2011-06-30T20:35:44.460 に答える