37

重複の可能性:
豆のポイントは何ですか?

ジャバビーンとは?それは何のために使用されますか?そして、いくつかのコード例は何ですか? ゲッターメソッドやセッターメソッドと関係があると聞いたのですが?Java Bean とは何か、どこにアクセスするのかについて、私はかなり混乱しています。私はそれをグーグルで調べましたが、明確な答えを見つけることができませんでした。

4

4 に答える 4

52

Java Bean は、パブリックの getter メソッドと setter メソッドを持つプライベート プロパティを持つ通常の Java クラスです。

Java Beans は一般的にヘルパー クラスとして使用されます。

例 -

public class User implements java.io.Serializable {

    private String name;
    private Integer age;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setAge(Integer age){
        this.age = age;
    }
}

実装Serializableは必須ではありませんが、Javabean を Java のメモリ外 (ハードディスクやネットワークなど) に永続化または転送したい場合に非常に役立ちます。

JavaBeans が使用されている場所は?

于 2012-07-10T05:15:53.443 に答える
25

JavaBeans は、Java の再利用可能なソフトウェア コンポーネントです。実際には、特定の規則に準拠した Java プログラミング言語で記述されたクラスです。これらは、多くのオブジェクトを単一のオブジェクト (Bean) にカプセル化するために使用されるため、複数の個別のオブジェクトではなく、単一の Bean オブジェクトとして渡すことができます。JavaBean はシリアライズ可能で、引数のないコンストラクターを持ち、getter メソッドと setter メソッドを使用してプロパティにアクセスできる Java オブジェクトです。

利点

  • Bean は、Java の「一度書けばどこでも実行できる」というパラダイムの利点をすべて享受します。
  • 別のアプリケーションに公開されている Bean のプロパティ、イベント、およびメソッドを制御できます。
  • Bean の構成を支援する補助ソフトウェアを提供できます。
  • Bean の構成設定は永続ストレージに保存でき、後で復元できます。
  • Bean は、他のオブジェクトからイベントを受信するために登録することができ、それに送信されるイベントを生成できます。

短所

  • nullary コンストラクターを持つクラスは、無効な状態でインスタンス化される可能性があります。そのようなクラスが (ある種のフレームワークによって自動的にではなく) 開発者によって手動でインスタンス化された場合、開発者はクラスを無効な状態でインスタンス化したことに気付かない可能性があります。コンパイラはそのような問題を検出できません。また、たとえ文書化されていたとしても、開発者がその文書を見る保証はありません。
  • すべてのプロパティに対して getter を作成し、それらの多く、ほとんど、またはすべてに対して setter を作成する必要があるため、膨大な量のボイラープレート コードが作成されます。

例 :

package beans;

/**
 * Class <code>PersonBean</code>.
 */
public class PersonBean implements java.io.Serializable {

    private String name;

    private boolean deceased;
    static final long serialVersionUID = 1L;

    /** No-arg constructor (takes no arguments). */
    public PersonBean() {
    }

    /**
     * Property <code>name</code> (note capitalization) readable/writable.
     */
    public String getName() {
        return this.name;
    }

    /**
     * Setter for property <code>name</code>.
     * @param name
     */
    public void setName(final String name) {
        this.name = name;
    }

    /**
     * Getter for property "deceased"
     * Different syntax for a boolean field (is vs. get)
     */
    public boolean isDeceased() {
        return this.deceased;
    }

    /**
     * Setter for property <code>deceased</code>.
     * @param deceased
     */
    public void setDeceased(final boolean deceased) {
        this.deceased = deceased;
    }
}

http://en.wikipedia.org/wiki/JavaBeansを参照

@Andy からのコメントによると、serialVersionUID を宣言する必要があります。Java ドキュメントによると

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members. Array classes cannot declare an explicit serialVersionUID, so they always have the default computed value, but the requirement for matching serialVersionUID values is waived for array classes.

serialVersionUID を明示的に指定しない場合、値は自動的に生成されますが、コンパイラの実装に依存するため脆弱です。

于 2012-07-10T05:18:25.830 に答える
7

JavaBean API は、JavaBean に関する多くの規約を定義しています。ウィキペディアによると:

必要な規則は次のとおりです。

  • クラスには、パブリックの既定のコンストラクタ (引数なし) が必要です。これにより、編集およびアクティベーション フレームワーク内でのインスタンス化が容易になります。
  • クラス プロパティは、標準の命名規則に従って、get、set、is (get の代わりにブール プロパティに使用) およびその他のメソッド (いわゆるアクセサ メソッドおよびミューテータ メソッド) を使用してアクセスできる必要があります。これにより、フレームワーク内の Bean 状態の簡単な自動検査と更新が可能になります。その多くには、さまざまなタイプのプロパティのカスタム エディターが含まれています。セッターは引数を 1 つだけ受け取る必要があります。
  • クラスはシリアライズ可能である必要があります。これにより、アプリケーションとフレームワークは、VM とプラットフォームに依存しない方法で、Bean の状態を確実に保存、保存、および復元できます。

多くの場合、これらは、使用されるデータをモデル化するために使用できるため、アプリケーションで見つけることができる最も一般的なタイプのクラスです。そのような Bean の例を以下に示します。

public class Person implements Serializable
{
  private String name;
  private boolean alive;

  public Person()
  {
    // constructor logic...
  }

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public boolean isAlive()
  {
    return alive;
  }

  public void setAlive(boolean alive)
  {
    this.alive = alive;
  }
}

ご覧のとおり、プロパティはゲッターとセッターに反映されます。

HTH

于 2012-07-10T05:23:16.193 に答える
1

EJB Beans ではなく Java-Beansについて話している場合、ここに説明があります...

1. JavaBean には、引数を取らないコンストラクターがあります。

2. JavaBean には一連のプロパティがあります。

3. JavaBean には、基になるプロパティへのアクセスを許可するアクセサ (getXxx、または Boolean プロパティの場合は isXxx) メソッドとミューテータ メソッド (setXxx) があります。

3 番目のポイントは、プライベート インスタンス変数とパブリック ゲッター、セッターを持つ Java クラスを示しています。

例えば:

import java.util.Date;

public class User {
    private Date loginDate;
    private String name;
    private String password;

    public User() { }

    public Date getLoginDate() {
        return loginDate;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void delete() {
        // code to delete user from database
    }

    public void update() {
        // code to update user in database
    }

    public static User getUser(String name) {
        // code returning a new User object
        // populated from the database
    }
}
于 2012-07-10T05:18:29.700 に答える