これは初心者の質問かもしれませんが、多くのチュートリアルと例では、これらのアノテーションが同じことをするかのように使用されるのを見ました。
ただし、@Named
を使用していくつかの制限に遭遇しました(特に依存関係の挿入など)。違いが説明されているソースを見つけることができなかったので、だれかが大まかな概要を説明できると非常に感謝しますどちらかを使用します。
@Named
は、JSFやJSPなどのビューテクノロジーで使用されるEL名をCDI管理対象Beanに提供します。 CDIアプリケーションでは、しないでください@Named
注釈を使用して、CDIが管理するBeanを作成します(@Karlのコメントに感謝します)。
@ManagedBean
は、BeanをJSFによって管理し、次のことができます。
両方の種類のBean間でインジェクションがどのように機能するかについて詳しくは、これを参照してください 関連する質問 .
Beanのスコープにも違いがあることに注意してください。それらは異なるパッケージに由来しますが、同じ名前です(JSF:javax.faces.bean
、CDI:javax.enterprise.context
。したがって、間違ったクラスを含めると、多くの場合エラーと混乱の原因になります。
私の経験から:JSF管理Beanよりも柔軟性が高いため、可能な限りCDI Beanを使用する必要があります。唯一の欠点は、CDIがビュースコープを認識しないため、@ ManagedBeanにフォールバックするか、Seamのようなサードパーティの拡張機能を使用する必要があることです。