いくつかのフォーラムで「マネージドBean」と「バッキングBean」という用語に出会いました。多くの人は、両方とも同じだと考えています。しかし、わずかな違いがあるようです。これら2つの用語の正確な違いを理解するのに役立つ人はいますか?
私の最初の答えを変える-2つの間に有意な違いはありません。 tutorial は、バッキングBeanが後で管理対象Beanとして宣言されることを示します。要約すると、
「バッキングビーン」という用語は実際には使用したことがありません。そのため、「マネージドBean」のみを使用した方がよい場合があります。 JSF 2.0(およびCDI)では、@ManagedBean
-したがって、BeanはマネージドBeanです。
BalusCは、「バッキングBean」が定義であり、「マネージドBean」がインスタンスであることを提案しました。これはJSFクリエイターの最初のアイデアかもしれませんが、サポートする価値はないと思います。たとえば、CDIとspringには、「bean定義」と「beanインスタンス」の異なる用語はありません。
JSF 2.0仕様では、「バッキングBean」という用語を数回言及しているだけで、定義はまったくありません。それに加えて、「バッキングBeanクラス」に言及しています。これは、「バッキングBean」!=「バッキングBeanクラス」を意味し、さらに混乱をもたらします。
結論として、私にとっては両方とも交換可能であり、「マネージドBean」のみを使用することに固執します。
マネージドBeanとは?
JSF実装によって管理されるJavaBeanオブジェクトは、マネージドBeanと呼ばれます。マネージドBeanは、Beanの作成および管理方法を説明します。 Beanの機能とは関係ありません。
バッキングBeanとは?
バッキングBeanは、ページで使用されるUIコンポーネントに関連付けられたJavaBeansコンポーネントです。バッキングBean管理は、UIコンポーネントオブジェクトの定義を、アプリケーション固有の処理を実行してデータを保持するオブジェクトから分離します。バッキングBeanは、ページで使用されるUIコンポーネントに関連付けられたプロパティと処理ロジックを定義します。各backing-beanプロパティは、コンポーネントインスタンスまたはその値にバインドされます。バッキングBeanは、コンポーネントのデータの検証、コンポーネントが起動するイベントの処理、コンポーネントのアクティブ化時にナビゲーションに関連する処理の実行など、コンポーネントの機能を実行するメソッドのセットも定義します。
バッキングBeanとマネージドBeanの違いは何ですか?
バッキングBeanは単なる規則であり、非常に特定の目的を持つJSF管理Beanのサブタイプです。バッキングBeanには、その使用法を除いて他のマネージドBeanと異なる特別なものはありません。
[〜#〜] mb [〜#〜]:マネージドBean; [〜#〜] bb [〜#〜]:バッキングBean
1)[〜#〜] bb [〜#〜]:バッキングBeanは、フォームによって参照されるBeanです。
[〜#〜] mb [〜#〜]:マネージドBeanはJSFに(faces-config.xmlで)登録され、自動的に作成(およびオプションで初期化)されたバッキングBeanです。必要なときのJSF。
管理対象Beanの利点は、JSFフレームワークがこれらのBeanを自動的に作成し、オプションでfaces-config.xmlで指定したパラメーターでそれらを初期化することです。
2)[〜#〜] bb [〜#〜]:バッキングBeanはリクエストスコープでのみ定義する必要があります
[〜#〜] mb [〜#〜]:JSFによって作成された管理対象Beanは、リクエスト、セッション、またはアプリケーションスコープ内に格納できます。
バッキングBeanは、リクエストスコープで定義し、特定のページと1対1の関係で存在し、ページ固有のイベント処理コードをすべて保持する必要があります。現実のシナリオでは、複数のページで同じ裏方Beanをバックグラウンドで共有する必要がある場合があります。バッキングBeanには、ビューデータだけでなく、そのデータに関連する動作も含まれます。
バッキングBeanは、JSF UIにバインドされたBeanです。マネージドBeanは任意のBeanです
簡単に言えば、
開発者としてのあなた:
@ManagedBean(name="managedBean")
@RequestScoped
public class BackingBean {
// ...
}
Bean管理フレームワークとしてのJSFは、以下をカバーします。
BackingBean managedBean = new BackingBean();
externalContext.getRequestMap().put("managedBean", managedBean);
そのため、バッキングBeanはユーザーが開発し、通常はビューに関連付けられている具象クラスです。マネージドBeanは具象インスタンスであり、オンデマンドでBean管理フレームワークによって作成され、目的のスコープに入れられます。 #{managedBean}
ELで。自分で作成してスコープに入れる必要はありません。そのようにした場合、フレームワーク管理Beanの手段はありません。
CDI @Named
およびSpring @Component
JSFと本質的に同じことを行います@ManagedBean
。
JSF、CDI、SpringなどのBean管理フレームワークがマネージドBeanを見つけて作成する方法の詳細については、次のトラブルシューティングで詳細な洞察を提供する必要があります。 javax.el.PropertyNotFoundExceptionの特定と解決:ターゲット到達不能 。
http://docs.Oracle.com/javaee/5/tutorial/doc/bnaqm.html は言う
典型的なJavaServer Facesアプリケーションには、1つ以上のバッキングBeanが含まれます。各バッキングBeanは、特定のページで使用されるUIコンポーネントに関連付けられたJavaServer Faces管理Beanです。マネージドBeanは、マネージドBean機能を使用して構成できるJavaBeansコンポーネント(JavaBeansコンポーネントを参照)です。これについては、Beanの構成で説明しています。このセクションでは、アプリケーションでのバッキングBeanの作成、構成、および使用に関する基本概念を紹介します。
http://docs.Oracle.com/javaee/6/tutorial/doc/bnaqm.html は、「バッキングBean」については言及していません。
管理対象Beanは、コンテナによって管理(インスタンス化および破棄)されます。
バッキングBeanは、データモデルとしてビューをバックするマネージドBeanです。
バッキングBeanは、厳密にUIの目的で使用される、つまりjspファイルで参照されるBeanです。結局、JSFコンテナーによって管理されるすべてのBeanは管理対象Beanですが、使用されるコンテキストはさまざまです。詳細については、ここで承認済みの回答を参照してください: JSF:ManagedBean、ビジネスロジックを扱うのに適した場所ですか?