42

違いは何ですか

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

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

4

1 に答える 1

55
  1. javax.enterprise.context.SessionScopedJSR 346javax.enterprise.context.* )およびパッケージ内の他のすべての注釈は、 CDIのコンテキストを維持します。CDIは、Java EEスペース内での依存性注入、Bean、および一般的なリソース管理のための、代替の、用途が広く、より強力なメカニズムを提供します。これはJSFマネージドBeanの代替であり、JSFの次期バージョンではJSFBean管理メカニズムに取って代わるように設定されています。

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

    CDIはすべてのJavaEE開発にとって当然の選択かもしれませんが、JSFマネージドBeanは、サーブレットコンテナー(Tomcat)とアプリケーションサーバー(Glassfish、JBossなど)間で移植可能です。CDI Beanは、完全なアプリケーションサーバー内にのみ存在できます。ただし、多少の手間がかかる場合は、 Tomcat7を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)およびその他のDI関連のアノテーションjavax.annotation.*は、Java EE仕様内の他の用途のために、JSFベースのアノテーションを一般化する試みであり、実際にはエンド開発者が使用するべきではありません。

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

これらの関連する質問も参照してください。

于 2013-02-25T00:06:46.807 に答える