JavaBeansが使用される場所は?


172

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

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

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

10
「Java Beans」と「Enterprise Java BeansまたはEJBs」を混同しないでください。
Rahul、

53
実際に私はEJBと混同することができますが、それをそこに何か特別の..isどのように豆その後、自分自身を知っていけない...
Sidharth

回答:


178

多くの場合、実際のデータを表すだけです。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のメモリの外部にJavabeanを永続化または転送できるようにする場合に非常に役立ちます。

たとえばDAOクラスでは、それを使用してデータベースのテーブルのデータを格納するユーザーのリストを作成できuserます。

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にデータを転送できます。

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の規則に従ってELアクセスして、データを表示できます。

<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>

それは意味がありますか?ご覧のとおり、データの保存転送、およびアクセスにどこでも使用できる規則の一種です。

以下も参照してください。


11
すばらしい説明、そして通常これに対する感謝はImplementing Serializable自体は必須ではありませんが、Javaのメモリを永続化したり、Javaのメモリの外に(たとえば、ハードディスクやネットワーク上で)転送したい場合に非常に役立ちます。
agpt 2013

しかし、Java docには、シリアル化を実装する必要があると記載されているので、それを明確にしてもらえますか?
SSP 2014

8
@SSP:1)javadocはありません。2) "すべき"!= "必須"。
BalusC 2014

61

豆自体

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

  • 彼らはうまくシリアライズします。
  • リフレクションを使用してインスタンス化できます。
  • それ以外の場合は、反射を使用して非常に簡単に制御できます。
  • ビジネスコードからの実際のデータをカプセル化するのに適しています。
  • 共通の慣習は、誰でもあなたの豆を使用でき、あらゆる種類のドキュメントやマニュアルがなくても、他の誰もが簡単かつ一貫した方法で使用できることを意味します。
  • POJOに非常に近いため、実際にはシステムの異なる部分間の相互運用性がさらに高くなります。

もちろん、まったく別の問題であり、プレーンなJavaBeansと混合すべきではないEnterprise JavaBeansもあります。名前が似ていて、2つが混同されやすいので、EJBについて言及したかっただけです。

WebアプリケーションのBean

Webアプリのコンテキストで「通常の」JavaBeanを検討する場合、足で靴を履くよりも理にかなっています。サーブレット仕様では、セッションをシリアライズ可能にする必要があるため、シリアライズ可能なものとしてセッションにデータを保存する必要があります。それでは、Beanにしてみてください。SomeBusinessDataBeanをセッションに投入するだけで、問題なく簡単に実行でき、仕様に準拠し、便利です。

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

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

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


50

豆は本当に何もないです。クラスが「bean」になるために必要なのは、次のものだけです。

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

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

詳細については、Sunから直接こちらをご覧ください


15

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

ソフトウェア開発者がJava Beanとして使用できるようにするために、ソフトウェア開発者がクラスに加えなければならない特定の変更を間もなく確認します。ただし、Java設計者の目標の1つは、このテクノロジーを使いやすくすることでした。したがって、コードの変更は最小限です。

Java Beansの利点

ソフトウェアコンポーネントアーキテクチャは、ソフトウェアビルディングブロックを処理するための標準的なメカニズムを提供します。次のリストは、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コンポーネントの要件ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.