web-dev-qa-db-ja.com

異なるBean管理アノテーションがあるのはなぜですか

違いは何ですか

import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;

そして

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

39
Koray Tugay
  1. javax.enterprise.context.SessionScopedJSR 346 )およびjavax.enterprise.context.*パッケージの下の他のすべての注釈は [〜#〜] cdi [〜#〜] のコンテキストを維持します。 CDIは、Java EEスペース内の依存関係注入、Bean、および一般的なリソース管理のための代替の多目的でより強力なメカニズムを提供します。これは、JSF管理Beanの代替であり、JSF Beanに取って代わるように設定されています JSFの次期バージョン の管理メカニズム。

    現在、JSFとCDIアノテーション付きBeanは、任意の特定のJava EE Webアプリケーション内で交換可能です(いくつかの小さな制限がある場合)。ただし、CDIアノテーション付きBeanは、Web層の領域をはるかに超えて拡張されます。 Java= EE仕様がCDIを標準のBeanおよびDIメカニズムにするために進化しているのはこのためです。

    CDIはすべてのJava EE開発にとって明らかな選択ですが、JSF管理Beanはサーブレットコンテナー(Tomcat)とアプリケーションサーバー(Glassfish、JBossなど)の間で移植可能です)。CDIBeanは完全なアプリケーションサーバーのみ some legwork を使用すると、Tomcat 7を接続してCDIをサポートできます。

    具体的には、javax.enterprise.context.SessionScopedは、CDI内のJSFセッションスコープの並列実装です。

  2. javax.faces.bean.SessionScopedJSR 314 )およびjavax.faces.bean.*パッケージの下の他のすべての注釈は、JSF固有の依存性注入およびBean管理メカニズムを維持します。ただし、JSFアノテーションが付けられたBeanは、Web層内でのみ役立ちます。 JSFアノテーションで使用できるすべてのスコープは、CDI仕様内で複製されています。

  3. javax.annotation.ManagedBeanJSR 316 )およびjavax.annotation.*の下にあるその他のDI関連のアノテーションは、Java EE仕様であり、実際には最終開発者は使用しないでください。

なぜ存在するのですか? IMO、JSF BeanからCDI Beanへの移行は、テクノロジーの自然な進化です。 JSF Beanは順調に稼働していますが、Spring、Guice、およびSeamのようなものは、テクノロジーが十分でないことを明らかにしました。また、WebコンポーネントとEJBの間のギャップを埋める必要があり、そのニーズへの対応はCDIです。

これらの関連する質問も見てください:

49
kolossus