web-dev-qa-db-ja.com

JavaBeansが使用される場所

JavaBeanとは何ですか。なぜ必要なのですか?クラスとインターフェース構造を持つすべてのアプリを作成できますか?なぜ豆が必要なのですか?また、クラスとインターフェースの代わりにBeanが不可欠な例をいくつか教えてください。

以下のコンテキストでBeanの本質を説明してください。

  • Wepアプリ
  • スタンドアロンアプリ
162
Sidharth

多くの場合、実際のデータを表します。 Javabeanの簡単な例を次に示します。

public class User implements Java.io.Serializable {

    // Properties.
    private Long id;
    private String name;
    private Date birthdate;

    // Getters.
    public Long getId() { return id; }
    public String getName() { return name; }
    public Date getBirthdate() { return birthdate; }

    // Setters.
    public void setId(Long id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setBirthdate(Date birthdate) { this.birthdate = birthdate; }

    // Important Java.lang.Object overrides.
    public boolean equals(Object other) {
        return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
    }
    public int hashCode() {
        return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode();
    }
    public String toString() {
        return String.format("User[id=%d,name=%s,birthdate=%d]", id, name, birthdate);
    }
}

Serializableの実装はそれ自体必須ではありませんが、Javaのメモリの外部でJavabeansを永続化または転送できるようにしたい場合、非常に便利です。ハードディスク内またはネットワーク経由。

たとえば、DAOクラスでは、データベース内のuserテーブルのデータをstoreデータのユーザーリストを作成するために使用できます。 :

List<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setId(resultSet.getLong("id"));
    user.setName(resultSet.getString("name"));
    user.setBirthdate(resultSet.getDate("birthdate"));
    users.add(user);
}
return users;

たとえば、サーブレットクラスでは、データベースからUIにデータをtransferするために使用できます。

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}

たとえば、JSPページでは、JavaBeanの規則に従ってデータを表示するために ELaccessアクセスできます。 :

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Birthdate</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td><c:out value="${user.name}" /></td>
            <td><fmt:formatDate value="${user.birthdate}" pattern="yyyy-MM-dd" /></td>
        </tr>
    </c:forEach>
</table>

理にかなっていますか?ご覧のとおり、これはconventionのようなもので、どこでもstoretransferおよびaccessデータ。

こちらもご覧ください:

165
BalusC

豆自体

JavaBeans はどこにでもあり、規則であり、そこにあるほぼすべてのわずかに大きなライブラリは、それらの規則を使用して物事を自動化します。 JavaBeansを使用する理由はいくつかあります。

  • 彼らはうまくシリアライズします。
  • リフレクションを使用してインスタンス化できます。
  • そうでなければ、反射を使用して非常に簡単に制御できます。
  • ビジネスコードから実際のデータをカプセル化するのに適しています。
  • 一般的な規則では、誰でもBeanを使用でき、他の種類のBEANSを、ドキュメントやマニュアルを一切使用せずに、簡単かつ一貫した方法で使用できます。
  • POJO sに非常に近いため、実際にはシステムの異なる部分間の相互運用性がさらに向上します。

もちろん、 Enterprise JavaBeans もあります。これはまったく別の問題であり、プレーンなJavaBeansと混同しないでください。名前が似ており、これら2つを混同するのは簡単だからです。

WebアプリケーションのBean

Webアプリのコンテキストで「通常の」JavaBeansを検討する場合、足に靴を履くよりも理にかなっています。サーブレット仕様では、セッションをシリアル化できる必要があるため、セッション内のデータをシリアル化可能なものとして保存する必要があります。その場合、Beanにしないでください。 SomeBusinessDataBeanをセッションに投入するだけで、すぐに使用できます。

また、JavaBeansはアプリケーションの一部を完全に分離するのに役立つため、そのデータをアプリケーション間で転送することも簡単です。 JavaBeansは文字であり、アプリケーションのさまざまなサブシステムは非常に大規模な企業内の部門であると考えてください。Dept.AはDept.Bに大量のデータをメールしますが、Dept.Bは-またはさらにケア-データが本来あるべき場所から来て、レターを開き、そこから何かを読み、そのデータに基づいてそのことを行うことができます。

スタンドアロンアプリケーションのBean

実際、上記の内容はスタンドアロンアプリにも適用されますが、唯一の違いは、スタンドアロンアプリケーションにはステートフルUIがあるため、UIをもう少し混乱させることができることです。一方、WebアプリケーションにはステートフルUIがあります。 。この違いのため、スタンドアロンアプリケーションを混乱させるのは簡単ですが、それはまったく別のトピックの価値があり、JavaBeansとは直接関係していません。

58
Esko

豆は本当に大したものではありません。クラスが「bean」になるために必要なのは次のとおりです。

  • パブリック、引数コンストラクタなし
  • 直列化可能(直接またはそのスーパークラスの1つを介してSerializableインターフェイスを実装するため)。

特定の状況でフィールドを検出できるようにする場合は、特定の命名規則に準拠するクラスのプロパティのゲッターとセッターを追加できます(たとえば、そのクラスをオブジェクトのビジュアルエディターからドラッグアンドドロップできるようにする) IDEなど)。

詳細はSun here から直接見つけることができます。

49
JRL

Java Beanは、さまざまな異なる環境で再利用できるように設計されたソフトウェアコンポーネントです。 Beanの機能に制限はありません。ドキュメントのスペルのチェックなどの単純な機能、または株式ポートフォリオのパフォーマンスの予測などの複雑な機能を実行できます。 Beanはエンドユーザーに表示される場合があります。この一例は、グラフィカルユーザーインターフェイスのボタンです。 Beanはユーザーには見えない場合もあります。マルチメディア情報のストリームをリアルタイムでデコードするソフトウェアは、このタイプのビルディングブロックの例です。最後に、Beanは、ユーザーのワークステーションで自律的に動作するように、または他の一連の分散コンポーネントと連携して動作するように設計できます。データポイントのセットから円グラフを生成するソフトウェアは、ローカルで実行できるBeanの例です。ただし、株式取引所または商品取引所からリアルタイムの価格情報を提供するBeanは、他の分散ソフトウェアと協力してデータを取得する必要があります。

Java Beanとして使用できるように、ソフトウェア開発者がクラスにどのような変更を加えなければならないかをすぐに確認します。ただし、Javaデザイナーの目標の1つは、このテクノロジーを簡単に使用できるようにすることでした。したがって、コードの変更は最小限です。

Java Beanの利点

ソフトウェアコンポーネントアーキテクチャは、ソフトウェアビルディングブロックを処理する標準メカニズムを提供します。次のリストは、Javaテクノロジーがコンポーネント開発者に提供する特定の利点の一部を列挙しています。

  • Beanは、Javaの「一度だけ書き込み、どこでも実行」パラダイムのすべての利点を取得します。
  • アプリケーションビルダーツールに公開されるBeanのプロパティ、イベント、およびメソッドを制御できます。
  • Beanは、さまざまなロケールで正しく動作するように設計されている場合があり、グローバル市場で役立ちます。
  • 補助ソフトウェアを提供して、ユーザーがBeanを構成できるようにすることができます。このソフトウェアは、そのコンポーネントの設計時パラメーターが設定されている場合にのみ必要です。ランタイム環境に含める必要はありません。
  • Beanの構成設定は永続ストレージに保存し、後で復元できます。
  • Beanは、他のオブジェクトからイベントを受信するために登録でき、他のオブジェクトに送信されるイベントを生成できます。

Javabeanの簡単な例:

public class MyBean implements Java.io.Serializable
{

       protected  int theValue;

       public MyBean()
       {
       }

       public void setMyValue(int newValue)
       {
           theValue = newValue;
       }

      public int getMyValue()
      {
           return theValue;
      }

}

これは、JavaBeans永続化メカニズムによって自動的に保存および復元される状態(変数theValue)を持つMyBeanという名前の実際のBeanであり、ビジュアルプログラミング環境で使用できるMyValueという名前のプロパティがあります。このBeanには視覚的な表現はありませんが、JavaBeanコンポーネントの要件ではありません。

15