JavaBeans

בשפת התכנות ג'אווה, **JavaBeans** (**ג'אווה בינז**, באנגלית bean: פול קפה או שעועית) הם רכיבי תוכנה הניתנים לשימוש חוזר. אלו הן מחלקות הנכתבות בשפת ג'אווה ומשמשות כדי לכמס הרבה אובייקטים בתוך אובייקט אחד (ה-bean), כך שניתן יהיה להעביר אותם ממקום למקום כאובייקט bean אחד, במקום הרבה אובייקטים בודדים.

## קונבנציות של JavaBeans
על מנת לתפקד כ-JavaBean, המחלקה חייבת להיבנות לפי מספר קונבנציות (מוסכמות) הנוגעות למתן השמות למתודות, יצירת מופעים והתנהגות. קונבנציות אלו מאפשרות יצירת כלים אשר יכולים להשתמש ב-JavaBeans, להחליף ביניהם, לחבר ביניהם וכדומה.

JavaBean היא מחלקת ג'אווה העונה על שלוש הדרישות הבאות:
* **האובייקט ניתן ל[[סריאליזציה]] (המחלקה מממשת את ה[[ממשק (תכנות)|ממשק]] <code>Serializable</code>)**. זה מאפשר ליישומים  חיצוניים ולתשתיות תוכנה (frameworks) לשמור, לאחסן ולשחזר את המצב של ה-bean בצורה אמינה, ללא תלות במכונה הווירטואלית והפלטפורמה.
* **למחלקה יש [[בנאי (מדעי המחשב)|בנאי]] שאינו מקבל ארגומנטים (no arguments constructor)**. דבר זה מאפשר יצירה והפעלה פשוטים של מופעים של המחלקה באמצעות תשתיות תוכנה.
* **קיימת גישה למשתני המחלקה (properties) באמצעות מתודות get ו-set ([[מתודת Mutator|מתודות mutator]])**. למתודות אלה ניתנים שמות העונים על קונבנציה סטנדרטית למתן שמות. לדוגמה, עבור משתנה מחלקה בשם `name` ייווצרו המתודות `getName` ו-`setName`. למשתני מחלקה מטיפוס `boolean`, מתודת ה-`get` מוחלפת במתודה המתחילה ב-`is`. לדוגמה, עבור משתנה מחלקה בשם `empty` מטיפוס `boolean` תהיה קיימת המתודה `isEmpty`. השמות עבור מתודות `set` אינם משתנים עבור משתנים בוליאניים. מתודות `set` חייבות לקבל רק ארגומנט אחד. כללים אלה מאפשרים בדיקה ועדכון אוטומטיים פשוטים של מצב ה-bean באמצעות תשתיות תוכנה, שרבות מהן כוללות מנגנונים משלהן לעדכון משתני מחלקה מטיפוסים שונים.

## דוגמה ל-JavaBean
**<code>PersonBean.java</code>**:

```java
package beans;

import java.io.*;

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

    private String name;

    private boolean deceased;

    /** 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;
    }
}
```


**<code>TestPersonBean.java</code>**:

```java
import beans.PersonBean;

/**
 * Class <code>TestPersonBean</code>.
 */
public class TestPersonBean {
    /**
     * Tester method <code>main</code> for class <code>PersonBean</code>.
     * @param args
     */
    public static void main(String[] args) {
        PersonBean person = new PersonBean();
        person.setName("Bob");
        person.setDeceased(false);

        // Output: "Bob [alive]"
        System.out.print(person.getName());
        System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
    }
}
```


**<code>testPersonBean.jsp</code>**:

```html4strict
<% // Use of PersonBean in a JSP. %>
<jsp:useBean id="person" class="beans.PersonBean" scope="page"/>
<jsp:setProperty name="person" property="*"/>

<html>
    <body>
        Name: <jsp:getProperty name="person" property="name"/><br/>
        Deceased? <jsp:getProperty name="person" property="deceased"/><br/>
        <br/>
        <form name="beanTest" method="POST" action="testPersonBean.jsp">
            Enter a name: <input type="text" name="name" size="50"><br/>
            Choose an option:
            <select name="deceased">
                <option value="false">Alive</option>
                <option value="true">Dead</option>
            </select>
            <input type="submit" value="Test the Bean">
        </form>
    </body>
</html>
```


## קישורים חיצוניים
* 
* המדריך הרשמי ל-JavaBeans באתר של Oracle 

קטגוריה:Java