web-dev-qa-db-ja.com

マネージドBeanとバッキングBeanの違い

いくつかのフォーラムで「マネージドBean」と「バッキングBean」という用語に出会いました。多くの人は、両方とも同じだと考えています。しかし、わずかな違いがあるようです。これら2つの用語の正確な違いを理解するのに役立つ人はいますか?

60
Krishna

私の最初の答えを変える-2つの間に有意な違いはありません。 tutorial は、バッキングBeanが後で管理対象Beanとして宣言されることを示します。要約すると、

  • バッキングBeanはコンテキスト外のクラスです
  • マネージドBeanは、JSFマネージド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」のみを使用することに固執します。

64
Bozho

マネージド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には、ビューデータだけでなく、そのデータに関連する動作も含まれます。

16
Santosh

バッキングBeanは、JSF UIにバインドされたBeanです。マネージドBeanは任意のBeanです

10
Jigar Joshi

簡単に言えば、

開発者としてのあなた:

@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の特定と解決:ターゲット到達不能

こちらもご覧ください:

8
BalusC

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」については言及していません。

4
Philip Durbin

管理対象Beanは、コンテナによって管理(インスタンス化および破棄)されます。

バッキングBeanは、データモデルとしてビューをバックするマネージドBeanです。

2
abbas

バッキングBeanは、厳密にUIの目的で使用される、つまりjspファイルで参照されるBeanです。結局、JSFコンテナーによって管理されるすべてのBeanは管理対象Beanですが、使用されるコンテキストはさまざまです。詳細については、ここで承認済みの回答を参照してください: JSF:ManagedBean、ビジネスロジックを扱うのに適した場所ですか?

1
al.