いくつかのフォーラムで「マネージドBean」と「バッキングBean」という用語に出くわしました。多くの人が両方とも同じだと思います。ただし、若干の違いがあるようです。これら2つの用語の正確な違いを理解するのを手伝ってくれる人はいますか?
11 に答える
私の最初の答えを変える-2つの間に意味のある違いはありません。チュートリアルでは、バッキング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」のみを使用することに固執します。
マネージドBeanとは何ですか?
JSF実装によって管理されるJavaBeanオブジェクトは、管理対象Beanと呼ばれます。管理対象Beanは、Beanがどのように作成および管理されるかを記述します。Beanの機能とは何の関係もありません。
バッキングビーンとは何ですか?
バッキングBeanは、ページで使用されるUIコンポーネントに関連付けられたJavaBeansコンポーネントです。Backing-Bean管理は、UIコンポーネントオブジェクトの定義を、アプリケーション固有の処理を実行してデータを保持するオブジェクトから分離します。バッキングBeanは、ページで使用されるUIコンポーネントに関連付けられたプロパティと処理ロジックを定義します。各backing-beanプロパティは、コンポーネントインスタンスまたはその値のいずれかにバインドされます。バッキングBeanは、コンポーネントのデータの検証、コンポーネントが起動するイベントの処理、コンポーネントのアクティブ化時のナビゲーションに関連する処理の実行など、コンポーネントの機能を実行する一連のメソッドも定義します。
バッキングBeanとマネージドBeanの違いは何ですか?
バッキングBeanは単なる慣例であり、非常に特別な目的を持つJSFマネージドBeanのサブタイプです。バッキングBeanには、その使用法を除けば、他のマネージドBeanと異なる特別なものは何もありません。
MB:マネージドBean; BB:バッキングビーン
1) BB:バッキングBeanは、フォームによって参照される任意のBeanです。
MB:マネージドBeanは、JSFに(faces-config.xmlで)登録され、必要に応じてJSFによって自動的に作成(およびオプションで初期化)されるバッキングBeanです。
管理対象Beanの利点は、JSFフレームワークがこれらのBeanを自動的に作成し、オプションで、faces-config.xmlで指定したパラメーターを使用してそれらを初期化することです。
2) BB :バッキングBeanはリクエストスコープでのみ定義する必要があります
MB :JSFによって作成されたマネージドBeanは、リクエスト、セッション、またはアプリケーションスコープ内に格納できます。
バッキングBeanは、リクエストスコープで定義され、特定のページと1対1の関係で存在し、ページ固有のイベント処理コードをすべて保持する必要があります。実際のシナリオでは、複数のページが舞台裏で同じバッキングBeanを共有する必要がある場合があります。バッキングBeanには、ビューデータだけでなく、そのデータに関連する動作も含まれます。
バッキングBeanは、JSFUIにバインドされている任意の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の特定と解決:TargetUnreachable。
参照:
http://docs.oracle.com/javaee/5/tutorial/doc/bnaqm.htmlによると
一般的なJavaServerFacesアプリケーションには、1つ以上のバッキングBeanが含まれています。各バッキングBeanは、特定のページで使用されるUIコンポーネントに関連付けられたJavaServerFacesマネージド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、ビジネスロジックを処理するのに適した場所ですか?
バッキングBeanは一種のマネージドBeanです。マネージドBeanはオブジェクト(つまり、クラスのインスタンス)であり、コンテナーによって作成されます(そのため、マネージドと呼ばれます)。もちろん、そのオブジェクトにはクラスがあり、必要に応じて、そのクラスのインスタンスをいくつでも作成できます。 m = new MyManagedBean()でどのような注釈が付けられていても、それはNot-So-Managed-Beanになるか、少なくともコンテナーによって管理されないが、ユーザーによって管理されます:)
また、バッキングBeanは、通常JSF requestScopeを使用する一種のマネージドBeanです(ただし、ADFなどの一部のフレームワークでは、backingBeanScopeと呼ばれるバッキングBean専用の指定スコープもあります-想像もしていませんでした) 。
そしてそうです...BackingBeansと呼ばれるjsfマネージドBeanのフレーバーは、UIComponentsをバインドしてActionListenersを作成するために使用されますが、たとえば「モデルBeans」フレーバーはセッションスコープに入り、データを保持します。
私はJSFで非常に良い(高価な)コースを受講しました。私がそこで学んだことは、http://www.avromroyfaderman.com/2008/07/from-backing-bean-to-managed-bean/で説明されていることについてです。
おそらく、この違いは理論上の違いや用語の語源ではありませんが、特に複数の開発者がいる大規模なプロジェクトの一部である場合や、多くの開発者を維持する必要がある場合は、アーキテクチャを設定するための非常に実用的な方法です。長い間コード。基本的には、UIビジネスロジックをマネージドBeanに配置するという考え方です。バッキングBeanはまばらで、ページ自体をサポートするだけです。
このリンクから JSF-マネージドBean
マネージドBean:
Managed Beanは、JSFに登録されている通常のJavaBeanクラスです。つまり、Managed Beansは、JSFフレームワークによって管理されるJavaBeanです。
このリンクから、WebページのバッキングBeanの作成と使用:
バッキングビーン:
JSFでは、バッキングBeanは主にUIロジックを提供し、アプリケーションのWeb層とビジネス層の間のデータを管理するために使用されるJavaBeanです(データ転送オブジェクトと同様)。通常、JSFページごとに1つのバッキングBeanがあります。バッキングBeanには、ページで使用されるUIコンポーネントのロジックとプロパティが含まれています。
注意:
アプリケーションの起動時にバッキングBeanを使用できるようにするには、名前とスコープを指定して管理対象Beanとして登録します。
マネージドBean:
マネージドBeanは、JSF(faces-config.xml内)に登録されているか、アノテーションを使用しているバッキングBeanです。マネージドBeanは、必要に応じてJSFによって自動的に作成されます(オプションで初期化されます)。
アプリケーションでマネージドBeanを使用する場合は、JSFページで次の構文を使用して、Beanから値を設定または取得する必要があります。
<h:inputText value="#{user.name}"/>
バッキングビーン:
Webフォームの一部またはすべてのコンポーネントオブジェクトを含むBean。このようなBeanは、WebフォームのバッキングBeanと呼ばれます。
バッキングBeanを使用する場合は、フォームのコンポーネントをBeanのコンポーネントに接続する必要があります。この目的でバインディング属性を使用します
例:
<h:inputText binding="#{myForm.myComponent}" .../>
バッキングBeanの値を取得または設定する方法を観察します。
バッキングBeanは、リクエストスコープで定義され、特定のページと1対1の関係で存在し、ページ固有のイベント処理コードをすべて保持する必要があります
それが誰かに役立つことを願っています。