JavaBeans

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Не путать с Enterprise JavaBeans.

JavaBeans — классы в языке Java, написанные по определённым правилам. Они используются для объединения нескольких объектов в один (англ. bean — фасоль, кофейное зерно) для удобной передачи данных.

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

JavaBeans обеспечивают основу для многократно используемых, встраиваемых и модульных компонентов ПО. Компоненты JavaBeans могут принимать различные формы, но наиболее широко они применяются в элементах графического пользовательского интерфейса. Одна из целей создания JavaBeans — взаимодействие с похожими компонентными структурами. Например, Windows-программа, при наличии соответствующего моста или объекта-обёртки, может использовать компонент JavaBeans так, будто бы он является компонентом COM или ActiveX.

Правила описания JavaBean[править | править вики-текст]

Чтобы класс мог работать как 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]");
    }
}