JavaBeans

בשפת התכנות ג'אווה, JavaBeans (ג'אווה בינז, באנגלית bean: פול קפה או שעועית) הם רכיבי תוכנה הניתנים לשימוש חוזר. אלו הן מחלקות הנכתבות בשפת ג'אווה ומשמשות כדי לכמס הרבה אובייקטים בתוך אובייקט אחד (ה-bean), כך שניתן יהיה להעביר אותם ממקום למקום כאובייקט bean אחד, במקום הרבה אובייקטים בודדים. על מנת לתפקד כ-JavaBean, המחלקה חייבת להיבנות לפי מספר קונבנציות (מוסכמות) הנוגעות למתן השמות למתודות, יצירת מופעים והתנהגות. קונבנציות אלו מאפשרות יצירת כלים אשר יכולים להשתמש ב-JavaBeans, להחליף ביניהם, לחבר ביניהם וכדומה. JavaBean היא מחלקת ג'אווה העונה על שלוש הדרישות הבאות: האובייקט ניתן לסריאליזציה (המחלקה מממשת את הממשק Serializable). זה מאפשר ליישומים חיצוניים ולתשתיות תוכנה (frameworks) לשמור, לאחסן ולשחזר את המצב של ה-bean בצורה אמינה, ללא תלות במכונה הווירטואלית והפלטפורמה. למחלקה יש בנאי שאינו מקבל ארגומנטים (no arguments constructor). דבר זה מאפשר יצירה והפעלה פשוטים של מופעים של המחלקה באמצעות תשתיות תוכנה. קיימת גישה למשתני המחלקה (properties) באמצעות מתודות get ו-set (מתודות mutator). למתודות אלה ניתנים שמות העונים על קונבנציה סטנדרטית למתן שמות. לדוגמה, עבור משתנה מחלקה בשם name ייווצרו המתודות getName ו-setName. למשתני מחלקה מטיפוס boolean, מתודת ה-get מוחלפת במתודה המתחילה ב-is. לדוגמה, עבור משתנה מחלקה בשם empty מטיפוס boolean תהיה קיימת המתודה isEmpty. השמות עבור מתודות set אינם משתנים עבור משתנים בוליאניים. מתודות set חייבות לקבל רק ארגומנט אחד. כללים אלה מאפשרים בדיקה ועדכון אוטומטיים פשוטים של מצב ה-bean באמצעות תשתיות תוכנה, שרבות מהן כוללות מנגנונים משלהן לעדכון משתני מחלקה מטיפוסים שונים. PersonBean.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; } } 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> אתר האינטרנט הרשמי של JavaBeans המדריך הרשמי ל-JavaBeans באתר של Oracle (באנגלית)