24

これは初心者の質問かもしれませんが、多くのチュートリアルや例では、これらの注釈が同じことをしているように使用されているのを見ました。

しかし、それを使用するといくつかの制限に遭遇しました@Named(特に依存性注入など)。違いが説明されているソースを見つけることができませんでした。誰かがいつ使用するかについて大まかな概要を教えていただければ幸いです。他の。

4

1 に答える 1

43

@NamedCDI管理対象Beanに、JSFやJSPなどのビューテクノロジで使用されるEL名を付けます。CDIアプリケーションでは、BeanをCDIで管理するためにアノテーションは必要ないことに注意してください@Named(@Karlのコメントに感謝します)。

@ManagedBeanBeanをJSFによって管理するようにし、次のことができます。

  • 他の@ManagedBean注釈付きBeanに注入します(ただし、@ Named Beanには注入しません!)
  • 表現言語を介してビューからアクセスします

両方の種類のBean間でインジェクションがどのように機能するかについての詳細は、この関連する質問を参照してください。

Beanのスコープにも違いがあることに注意してください。それらは異なるパッケージに由来しますが、同じ名前が付けられています(JSF:javax.faces.bean、CDI:、javax.enterprise.contextしたがって、間違ったクラスを含めると、エラーや混乱の原因となることがよくあります。

私の経験から:JSFマネージドBeanよりも柔軟性があるため、可能な限りCDIBeanを使用する必要があります。唯一の欠点は、CDIがビュースコープを認識しないことです。そのため、@ ManagedBeanにフォールバックするか、Seamなどのサードパーティの拡張機能を使用する必要があります。

編集:CDIはViewScopeをサポートしています。LINKの詳細

于 2012-06-12T10:35:29.643 に答える