Что такое JavaBean?
Я понял, что "Bean" — это класс на Java с свойствами и методами-геттерами/сеттерами. Насколько я понимаю, это эквивалент структуры в C. Это правда?
Существует ли реальная синтаксическая разница между JavaBean и обычным классом? Есть ли какое-то специальное определение или интерфейс?
Почему вообще существует этот термин?
Также, что означает интерфейс Serializable?
5 ответ(ов)
JavaBeans — это классы на Java, которые соблюдают очень простую кодировочную конвенцию. Чтобы создать JavaBean, вам нужно выполнить несколько условий:
- Реализовать интерфейс
java.io.Serializable
— это нужно для сохранения состояния объекта. - Использовать публичный конструктор без аргументов — это необходимо для создания экземпляра объекта.
- Предоставить публичные методы получения и установки (геттеры и сеттеры) — это нужно для получения и установки значений приватных переменных (свойств).
Следуя этим простым правилам, вы сможете создать корректный JavaBean.
JavaBeans — это объекты Java, которые соответствуют определенным программным соглашениям. Вот ключевые свойства JavaBeans:
- Класс JavaBean должен реализовывать либо интерфейс
Serializable
, либоExternalizable
. - Класс JavaBean должен иметь конструктор без параметров (no-arg constructor).
- Все свойства JavaBean должны иметь открытые (public) методы установки (setter) и получения (getter).
- Все переменные экземпляра JavaBean должны быть приватными (private).
Вот пример JavaBean:
@Entity
public class Employee implements Serializable {
@Id
private int id;
private String name;
private int salary;
public Employee() {}
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
Таким образом, класс Employee
отвечает всем требованиям JavaBeans: он реализует Serializable
, содержит конструктор без параметров, имеет публичные методы для всех свойств и скрывает переменные экземпляров от прямого доступа.
Java Beans используются для сокращения количества кода и увеличения функциональности...
Java Beans применяются во всем Java EE в качестве универсального контракта для обнаружения и доступа в режиме выполнения. Например, JavaServer Pages (JSP) использует Java Beans в качестве объектных модулей передачи данных между страницами или между сервлетами и JSP. Java EE включает JavaBeans Activation Framework, который использует Java Beans для интеграции поддержки MIME-типов в Java EE. Также Java EE Management API использует JavaBeans как основу для инструментирования ресурсов, которые должны управляться в среде Java EE.
Что касается сериализации:
В процессе сериализации объектов объект может быть представлен в виде последовательности байтов, содержащей данные объекта, а также информацию о типе объекта и типах данных, хранящихся в объекте.
После того как сериализованный объект записан в файл, его можно считать из файла и десериализовать. То есть, информация о типе и байты, представляющие объект и его данные, могут быть использованы для восстановления объекта в памяти.
Конечно! Вот перевод с учетом стиля ответов на StackOverflow.com:
Есть небольшое предисловие и обновление о концепции бинов (Beans). Многие другие ответы действительно описывают, что это такое, но не так подробно объясняют, зачем они нужны.
Бины были изобретены на ранних этапах разработки Java как часть построения графических интерфейсов (GUI). Они следовали шаблонам, которые позволяли инструментам легко разбирать их и создавать панели свойств, чтобы редактировать атрибуты бина. В общем, свойства бина представляли собой элементы управления на экране (например, координаты x, y, ширина, высота, текст и т. д.).
Можно также рассматривать бины как строго типизированные структуры данных.
Со временем они стали полезны для множества инструментов, использующих аналогичный подход (например, Hibernate для сохранения структур данных в базе данных).
С развитием инструментов акцент сместился к аннотациям и вовне от разбора имен методов-сеттеров и геттеров. В настоящее время большинству систем не нужны бины; они могут работать с любыми простыми объектами Java с аннотированными свойствами, которые сообщает им, как с ними взаимодействовать.
Теперь я вижу бины как аннотированные "шарики" свойств — они действительно полезны только из-за аннотаций, которые они содержат.
Сами по себе бины не являются здоровым паттерном. Они разрушают инкапсуляцию по своей природе, так как раскрывают все свои свойства для внешнего манипулирования. При их использовании возникает тенденция (хотя это не обязательное условие) создавать код для внешнего управления бином вместо написания кода внутри бина (что противоречит принципу "не спрашивайте объект о его значениях, попросите объект что-то сделать для вас"). Использование аннотированных POJO с минимальным количеством геттеров и без сеттеров гораздо более ориентировано на объектно-ориентированное программирование, восстанавливая инкапсуляцию и обеспечивая возможность неизменяемости.
Кстати, пока происходило всё это, кто-то расширил концепцию до того, что назвали Enterprise Java Beans. Эти бины... другие. И они достаточно сложны, что многие люди почувствовали, что не понимают целиком концепцию бинов и перестали использовать этот термин. Думаю, именно поэтому вы чаще слышите, как бины упоминаются как POJO (поскольку каждый объект Java является POJO, это технически верно, но когда кто-то говорит "POJO", чаще всего они имеют в виду что-то, что следует паттерну бинов).
Вы найдете сериализацию полезной при развертывании вашего проекта на нескольких серверах, так как это позволит сохранять и передавать ваши объекты (бены) между ними.
Как работают сервлеты? Инстанцирование, сессии, общие переменные и многопоточность
Разница между StringBuilder и StringBuffer
Java 8: Преобразование List<V> в Map<K, V>
Возможные значения конфигурации hbm2ddl.auto в Hibernate и их назначение
Что такое PECS (Producer Extends Consumer Super)?