違いは何ですか
import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
と
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
?
違いは何ですか
import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
と
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
?
javax.enterprise.context.SessionScoped
(JSR 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セッションスコープの並列実装です。
javax.faces.bean.SessionScoped
(JSR 314)およびパッケージ内の他のすべてのアノテーションはjavax.faces.bean.*
、JSF固有の依存性注入およびBean管理メカニズムを維持します。ただし、JSFアノテーションが付けられたBeanは、Web層内でのみ役立ちます。JSFアノテーションで使用可能なすべてのスコープは、CDI仕様内で複製されています。
javax.annotation.ManagedBean
(JSR 316)およびその他のDI関連のアノテーションjavax.annotation.*
は、Java EE仕様内の他の用途のために、JSFベースのアノテーションを一般化する試みであり、実際にはエンド開発者が使用するべきではありません。
なぜそれらが存在するのですか?IMO、JSFBeanからCDIBeanへの移行は、テクノロジーの自然な進化です。JSF Beanは好調でしたが、Spring、Guice、Seamなどは、テクノロジーが十分ではないことを明らかにしました。WebコンポーネントとEJBの間のギャップを埋める必要もあり、そのニーズへの対応はCDIです。
これらの関連する質問も参照してください。