JavaBeans
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В вычислениях на основе Java платформы JavaBeans — это технология, разработанная Sun Microsystems и выпущенная в 1996 году как часть JDK 1.1.
Компоненты JavaBeans — это классы, которые инкапсулируют один или несколько объектов в один стандартизированный объект (компонент). Эта стандартизация позволяет обрабатывать bean-компоненты более общим способом, что упрощает повторное использование кода и самоанализ . Это, в свою очередь, позволяет рассматривать bean-компоненты как программные компоненты и визуально манипулировать ими со стороны редакторов и IDE без необходимости какой-либо начальной настройки или знания каких-либо внутренних деталей реализации.
В рамках стандартизации все bean-компоненты должны быть сериализуемыми , иметь конструктор с нулевым аргументом и разрешать доступ к свойствам с использованием методов получения и установки .
Функции
[ редактировать ]- Самоанализ
- Интроспекция — это процесс анализа компонента для определения его возможностей. Это важная особенность спецификации Java Beans, поскольку она позволяет другому приложению, например средству проектирования, получать информацию о компоненте.
- Характеристики
- Свойство является подмножеством состояния компонента. Значения, присвоенные свойствам, определяют поведение и внешний вид этого компонента. Они устанавливаются с помощью метода установки и могут быть получены с помощью метода получения.
- Кастомизация
- Специалист по настройке может предоставить пошаговое руководство, которому должен следовать процесс, чтобы использовать компонент в определенном контексте.
- События
- Компоненты могут взаимодействовать с моделью EventObject EventListener. [ нужны разъяснения ]
- Упорство
- Постоянство — это способность сохранять текущее состояние компонента, включая значения свойств компонента и переменных экземпляра, в энергонезависимое хранилище и извлекать их позже.
- Методы
- Компонент должен использовать методы доступа для инкапсуляции свойств. Компонент может предоставлять другие методы бизнес-логики, не связанные с доступом к свойствам.
Преимущества
[ редактировать ]- Свойства, события и методы компонента могут быть доступны другому приложению.
- Компонент может зарегистрироваться для получения событий от других объектов и может генерировать события, которые отправляются этим другим объектам. [ нужна ссылка ]
- Для настройки компонента может быть предоставлено вспомогательное программное обеспечение. [ нужна ссылка ]
- Параметры конфигурации компонента можно сохранить в постоянном хранилище и восстановить. [ нужна ссылка ]
Недостатки
[ редактировать ]- Класс с конструктором без аргументов может быть создан в недопустимом состоянии. [1] Если экземпляр такого класса создается разработчиком вручную (а не автоматически с помощью какой-либо платформы), разработчик может не осознавать, что экземпляр класса был создан неправильно. Компилятор не может обнаружить такую проблему, и даже если она задокументирована, нет гарантии, что разработчик увидит документацию.
- JavaBeans по своей природе изменчивы и поэтому лишены преимуществ, предлагаемых неизменяемыми объектами . [1]
- Необходимость создавать геттеры для каждого свойства и сеттеры для многих, большинства или всех из них может привести к созданию огромного количества шаблонного кода .
JavaBeans API
[ редактировать ]Функциональность JavaBeans обеспечивается набором классов и интерфейсов в java.beans
упаковка.
Интерфейс | Описание |
---|---|
АпплетИнициализатор | Методы в этом интерфейсе используются для инициализации Bean-компонентов, которые также являются апплетами . |
БинИнфо | Этот интерфейс позволяет разработчику указывать информацию о событиях, методах и свойствах компонента. |
Настройщик | Этот интерфейс позволяет разработчику предоставить графический интерфейс пользователя, с помощью которого можно настроить компонент. |
Режим дизайна | Методы в этом интерфейсе определяют, выполняется ли компонент в режиме разработки. |
Слушатель исключений | Метод в этом интерфейсе вызывается при возникновении исключения. |
Прослушиватель PropertyChangeListener | Метод в этом интерфейсе вызывается при изменении связанного свойства. |
Редактор свойств | Объекты, реализующие этот интерфейс, позволяют дизайнеру изменять и отображать значения свойств. |
VetoableChangeListener | Метод в этом интерфейсе вызывается при изменении свойства Constrained. |
Видимость | Методы этого интерфейса позволяют компоненту выполняться в средах, где графический интерфейс недоступен. |
Соглашения JavaBean
[ редактировать ]Чтобы функционировать как класс JavaBean , класс объекта должен подчиняться определенным соглашениям об именовании, построении и поведении методов. Эти соглашения позволяют иметь инструменты, которые могут использовать, повторно использовать, заменять и подключать Java Beans.
Необходимые соглашения следующие:
- Класс должен иметь общедоступный конструктор по умолчанию (без аргументов). Это позволяет легко создавать экземпляры в рамках редактирования и активации.
- класса Свойства должны быть доступны с помощью get , set , is (можно использовать для логических свойств вместо get), to и других методов (так называемых методов доступа и методов-мутаторов ) в соответствии со стандартным соглашением об именах . Это позволяет легко автоматизировать проверку и обновление состояния компонента в средах, многие из которых включают специальные редакторы для различных типов свойств. Сеттеры могут иметь один или несколько аргументов.
- Класс должен быть сериализуемым . (Это позволяет приложениям и платформам надежно сохранять, хранить и восстанавливать состояние компонента независимо от виртуальной машины и платформы.)
Пример кода
[ редактировать ]package player;
public class PersonBean implements java.io.Serializable {
/** Properties **/
private boolean deceased = false;
private List list;
/** Property "name", readable/writable. */
private String name = null;
/** No-arg constructor (takes no arguments). */
public PersonBean() {
}
public List getList() {
return list;
}
public void setList(final List list) {
this.list = list;
}
/**
* Getter for property "name".
*/
public String getName() {
return name;
}
/**
* Setter for property "name".
*
* @param value
*/
public void setName(final String value) {
this.name = value;
}
/**
* Getter for property "deceased"
* Different syntax for a boolean field (is vs get)
*/
public boolean isDeceased() {
return deceased;
}
/**
* Setter for property "deceased".
* @param value
*/
public void setDeceased(boolean value) {
deceased = value;
}
}
TestPersonBean.java
:
import player.PersonBean;
/**
* Class "TestPersonBean".
*/
public class TestPersonBean {
/**
* Tester method "main" for class "PersonBean".
*
* @param arguments
*/
public static void main(final String[] arguments) {
final PersonBean person = new PersonBean();
person.setName("Bob");
person.setDeceased(false);
person.setList(new ArrayList());
// Output: "Bob [alive]"
System.out.print(person.getName());
System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
}
}
<jsp:useBean id="person" class="player.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>
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Блох, Джошуа (2008). Эффективная Java (Второе изд.). Аддисон-Уэсли. п. 13 . ISBN 978-0-321-35668-0 .