Назад Зміст Вперед

10.6. Вимоги стандарту JavaBeansNaming

JavaBeans - класи в мові Java, написані за певними правилами. Вони використовуються для об'єднання кількох об'єктів в один (англ. Bean - квасоля, кавове зерно) для зручної передачі даних.

Специфікація Sun Microsystems визначає JavaBeans як придатні для повторного використання програмні компоненти, якими можна управляти, використовуючи графічні конструктори і засоби IDE.

JavaBeans забезпечують основу для багаторазово використовуваних, вбудованих і модульних компонентів ПЗ. Компоненти JavaBeans можуть приймати різні форми, але найбільш широко вони застосовуються в елементах графічного інтерфейсу. Одна з цілей створення JavaBeans - взаємодія зі схожими компонентними структурами. Наприклад, Windows-програма, при наявності відповідного моста або об'єкта-обгортки, може використовувати компонент JavaBeans так, нібито він є компонентом COM або ActiveX.

Правила опису Java Bean 

Щоб клас міг працювати як bean, він повинен відповідати певним угодам про імена методів, конструктор і поведінку. Ці угоди дають можливість створення інструментів, які можуть використовувати, заміщати і з'єднувати JavaBeans.

Правила опису свідчать:

Клас повинен мати конструктор без параметрів, з модифікатором доступу public. Такий конструктор дозволяє інструментам створити об'єкт без додаткових складнощів з параметрами.
Властивості класу повинні бути доступні через get, set і інші методи (так звані методи доступу), які повинні підкорятися стандарту про імена. Це легко дозволяє інструментам автоматично визначати і оновлювати зміст bean'ів. Багато інструментів навіть мають спеціалізовані редактори для різних типів властивостей.
Клас повинен бути серіалізованим. Це дає можливість надійно зберігати, зберігати і відновлювати стан bean незалежним від платформи і віртуальної машини способом.
Клас повинен мати перевизначені методи equals (), hashCode () і toString ().
Так як вимоги в основному викладені у вигляді угоди, а не інтерфейсу, деякі розробники розглядають JavaBeans, як Plain Old Java Objects, які слідують певним правилам іменування.

Приклади

 1 // PersonBean.java
 2 
 3 public class PersonBean implements java.io.Serializable {
 4     private String name;
 5     private boolean deceased;
 6 
 7     // Конструктор за замовчуванням (без аргументів).
 8     public PersonBean() {
 9     }
10 
11     // Методи геттери (get) і сеттери (set)
12     public String getName() {
13         return (this.name);
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     public boolean isDeceased() {
19         return (this.deceased);
20     }
21     public void setDeceased(boolean deceased) {
22         this.deceased = deceased;
23     }
24 
25     //Перевизначені методи equals() і hashCode()
26     @Override
27     public boolean equals(Object o) {
28         if (this == o) return true;
29         if (o == null || getClass() != o.getClass()) return false;
30 
31         PersonBean that = (PersonBean) o;
32 
33         if (deceased != that.deceased) return false;
34         return !(name != null ? !name.equals(that.name) : that.name != null);
35 
36     }
37 
38     @Override
39     public int hashCode() {
40         int result = name != null ? name.hashCode() : 0;
41         result = 31 * result + (deceased ? 1 : 0);
42         return result;
43     }
44 
45     //Перевизначений метод toString()
46     @Override
47     public String toString() {
48         return "PersonBean{" +
49                 "name='" + name + '\'' +
50                 ", deceased=" + deceased +
51                 '}';
52     }
53 }
// TestPersonBean.java

public class TestPersonBean {
    public static void main(String[] args) {

        PersonBean person = new PersonBean();
        person.setName("Bob");
        person.setDeceased(true);

        // Результат: "Bob [deceased]"
        System.out.print(person.getName());
        System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
    }
}

JavaBeans є класом, який має конструктор без аргументів і відповідає конвенціям JavaBeans іменування. Імена getter і setter методу складаються з слова отримати або встановити, відповідно, плюс ім'я властивості з першого символу кожного слова з великої. Ще один спосіб getter не має параметрів, але повертає значення типу властивості, в той час як setter метод має один параметр типу властивості і має порожній тип значення (void return type). Ось приклад:
public class CustomerBean implements java.io.Serializable {
  
    String firstName;
    String lastName;
    int accountNumber;
    int[] categories;
    boolean preferred;
  
    public String getFirstName(  ) {
      return firstName;
    }
  
    public void setFirstName(String firstName) {
      this.firstName = firstName;
    }

.