JavaBeans

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

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

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

== דוגמה ל-JavaBean ==
<div dir="ltr"><code>PersonBean.java</code>:</div>
<syntaxhighlight lang="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;
 }
}
</syntaxhighlight>

<div dir="ltr"><code>TestPersonBean.java</code>:</div>
<syntaxhighlight lang="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]");
 }
}
</syntaxhighlight>

<div dir="ltr"><code>testPersonBean.jsp</code>:</div>
<syntaxhighlight lang="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>
</syntaxhighlight>

== קישורים חיצוניים ==
* 
* [http://docs.oracle.com/javase/tutorial/javabeans/index.html המדריך הרשמי ל-JavaBeans באתר של Oracle] 

קטגוריה:Java