Концепция: JavaBean
Этот раздел содержит обзор объектов JavaBean, простой и мощной модели компонентов для Java.
Взаимосвязи
Связанные элементы
Основное описание

Введение

Объекты JavaBean определяют простую и мощную модель компонентов для Java. Цель объектов JavaBean - предоставить отдельные и многоразовые единицы, которыми разработчики могут управлять как программно, так и визуально с помощью инструментов компоновки.

Объекты JavaBean могут быть управляющими элементами GUI, но могут быть и не представленными визуально. Управляющие элементы GUI в Java обычно являются объектами JavaBean, чтобы ими можно было управлять инструментами компоновки. В J2EE простые объекты JavaBean обычно берутся из JSP, где они обеспечивают разделение презентации на языке HTML и кода на языке Java, содержащегося в объектах JavaBean.

Объект JavaBean - это класс Java с тремя различными составляющими:

Свойства JavaBean

Свойства JavaBean доступны другим компонентам. Обычно свойство - это частное значение, которое можно получить с помощью методов set и get, но оно может быть и вычисляемым значением. Обновление свойств может вызывать различные побочные эффекты.

Методы доступа к свойствам иногда называют аксессорами. Аксессоры могут быть методами get и set и подчиняются соглашениям об именах:

void setимя_свойства(тип_свойства value); // метод set
тип_свойства getимя_свойства() // метод get

Для булевского свойства метод get может быть следующим:

boolean isимя_свойства() // метод get для булевского свойства

Пример: пользовательский объект JavaBean

Ниже приведен пример простого объекта JavaBean (Customer) с двумя простыми свойствами: name и email. Обратите внимание, что свойства определяются парами методов set/get.

Диаграмма UML со свойствами Customer.

public class Customer {
private String name;
private String email;

public String getName() {
return name;
}

public void setName(String aName) {
name = aName;
}

public String getEmail() {
return email;
}

public void setEmail(String aEmail) {
email = aEmail;
}

}

Такие простые объекты JavaBean часто используются в JSP, где они позволяют передавать значения из форм Web-страниц.

Индексированные свойства

Помимо простых свойств, которые могут принимать только одно значение, существуют и свойства - массивы значений.

Индексированные свойства могут возвращать значение по указанному индексу или целый массив значений.

У индексированных свойств следующие сигнатуры:

void setимя_свойства(int index, тип_свойства value); // индексированный set
тип_свойства getter(int index); // индексированный get
void setимя_свойства(тип_свойства values[]); // массив set
тип_свойства[]getимя_свойства(); // массив get

Привязанные свойства

Механизм привязанных свойств обеспечивает рассылку уведомлений при изменении свойства. Объекты, заинтересованные в получении уведомлений об изменениях, регистрируют себя заранее, и когда свойство изменяется, зарегистрированным объектам отправляется соответствующее уведомление. Обычно это уведомление рассылается посредством события, выдаваемого компонентом с привязанным свойством после задания свойства.

Объект JavaBean с привязанным свойством предлагает методы регистрации и отмены регистрации заинтересованных объектов, называемых получателями. Разработчики могут определить свой собственный механизм уведомлений, но библиотеки Java предоставляют несколько распространенных классов поддержки в составе пакета java.beans.

Ограниченные свойства

Ограниченные свойства схожи с привязанными свойствами, но уведомление отправляется до фактического задания свойства. Это позволяет заинтересованным сторонам запретить изменение свойства, выдав исключительную ситуацию PropertyVetoException.

События и уведомление

События - это опция объектов JavaBean, позволяющая независимо разработанным компонентам обмениваться информацией друг с другом путем рассылки уведомлений об изменении состояния. В этой модели некоторые компоненты выдают события, а другие компоненты, находящиеся в роли получателей событий, их обрабатывают.

Для поддержки этой модели связи модель компонентов JavaBean предоставляет:

  • свойства, которые могут выдавать события (привязанные и ограниченные)
  • методы регистрации, чтобы получатели могли регистрироваться
  • события, содержащие информацию об изменении
  • получатели, которые могут реагировать на доставленное событие

Следующая диаграмма классов иллюстрирует эти концепции для объекта JavaBean EventSource с простым свойством int.

Диаграмма описана в прилагаемом тексте.

Во время настройки конкретные получатели регистрируются с объектом JavaBean. В один из последующих моментов другой объект вызывает метод setProperty, который запустит процесс уведомления путем создания объекта событий. Объект JavaBean EventSource вызовет метод propertyChange во всех зарегистрированных получателях. Получатели событий получат событие, прочтут его значения и отреагируют на него.

На следующей последовательной диаграмме иллюстрируется порядок вызовов:

Диаграмма описана в прилагаемом тексте.

Уведомление получателей выполняется синхронно по отношению к экземпляру JavaBean, который является источником события, однако получатель событий может обрабатывать их в другой нити.

Внутренний анализ

Внутренний анализ - это механизм среды выполнения, позволяющий обнаруживать свойства, события и методы JavaBean. Внутренний анализ применяется инструментами разработки и программами, не использующими закодированные зависимости в других компонентах. Работа механизма внутреннего анализа основана на анализе существующей информации с учетом соглашений об именах методов и интерфейсов. Класс BeanInfo поддерживает дополнительные функции внутреннего анализа. Соглашения об именах JavaBean, применяемые для внутреннего анализа, иногда называют "шаблонами проектирования", но их не следует смешивать с понятием "шаблон проектирования", существующим в объектно-ориентированном проектировании.

Постоянные данные

Объект JavaBean может постоянно храниться в памяти. Это достигается посредством механизма сериализации. Сериализация может быть автоматической или пользовательской, в зависимости от того, какие интерфейсы реализует JavaBean - сериализуемые или импортируемые. В JDK 1.4 появились новые классы XMLEncoder и XMLDecoder, позволяющие хранить экземпляры JavaBean в формате XML.

Настройка

Внешний вид и характеристики объекта JavaBean можно настраивать во время проектирования. Это особенно важно для визуальных объектов JavaBean, применяемых в графических пользовательских интерфейсах. Настройка выполняется с помощью редактора свойств или программ настройки. Программы настройки предоставляют пользовательский интерфейс для настройки экземпляра JavaBean во время проектирования.

BeanContext

BeanContext определяет логическую иерархию включений, позволяющую объектам JavaBean выяснять, какие функции и службы доступны в их среде. Механизмы BeanContext предоставляют поддержку логической иерархии включений объектов JavaBean и поиска служб, предлагаемых входящими в иерархию объектами JavaBean.

Среда активации объектов JavaBean™

Среда активации Java - это стандартное расширение Java, позволяющее определять тип фрагмента данных, инкапсулировать его, выяснять набор его доступных операций и создавать экземпляр компонента программного обеспечения, отвечающего требуемой операции над этим фрагментом.

Дополнительная информация

Дополнительная информация об объектах JavaBean приведена в документе JavaBeans API Specification, Version 1.01 на Web-сайте http://java.sun.com/. Выберите ссылку Docs & Training > Java 2 Platform, Standard Edition > Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification.