JavaBeans

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

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

קונבנציות של JavaBeans[עריכת קוד מקור | עריכה]

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

JavaBean היא מחלקת ג'אווה העונה על שלוש הדרישות הבאות:

  • האובייקט ניתן לסריאליזציה (המחלקה מממשת את הממשק Serializable). זה מאפשר ליישומים חיצוניים ולתשתיות תוכנה (frameworks) לשמור, לאחסן ולשחזר את המצב של ה-bean בצורה אמינה, ללא תלות במכונה הווירטואלית והפלטפורמה.
  • למחלקה יש קונסטרקטור שאינו מקבל ארגומנטים (default constructor). דבר זה מאפשר יצירה והפעלה פשוטים של מופעים של המחלקה באמצעות תשתיות תוכנה.
  • קיימת גישה למשתני המחלקה (properties) באמצעות מתודות get ו-set (מתודות mutator). למתודות אלה ניתנים שמות העונים על קונבנציה סטנדרטית למתן שמות. לדוגמה, עבור משתנה מחלקה בשם name ייווצרו המתודות getName ו-setName. למשתני מחלקה מטיפוס boolean, מתודת ה-get מוחלפת במתודה המתחילה ב-is. לדוגמה, עבור משתנה מחלקה בשם empty מטיפוס boolean תהיה קיימת המתודה isEmpty. השמות עבור מתודות set אינם משתנים עבור משתנים בוליאניים. מתודות set חייבות לקבל רק ארגומנט אחד. כללים אלה מאפשרים בדיקה ועדכון אוטומטיים פשוטים של מצב ה-bean באמצעות תשתיות תוכנה, שרבות מהן כוללות מנגנונים משלהן לעדכון משתני מחלקה מטיפוסים שונים.

דוגמה ל-JavaBean[עריכת קוד מקור | עריכה]

PersonBean.java:
package beans;
 
/**
 * Class <code>PersonBean</code>.
 */
public class PersonBean implements java.io.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;
    }
}
TestPersonBean.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]");
    }
}
testPersonBean.jsp:
<% // 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>

קישורים חיצוניים[עריכת קוד מקור | עריכה]