Transcript JavaBeans
Java Advanced
JavaBeans
Содержание
СПбГУ ИТМО
1.
2.
3.
4.
Введение
Реализация
Применение
Хранение
5. Функции
6. Заключение
Georgiy Korneev
Java Advanced / JavaBeans
2
Часть 1
Введение
JavaBeans
Компонентная модель языка Java
Основные понятия
Bean
Свойство (property)
Событие (event)
Сохраняемость (persistance)
Примеры
Компонента GUI
Модель GUI
Georgiy Korneev
Java Advanced / JavaBeans
4
Свойство
Свойство
Getter
xxx
getXxx или isXxx
Setter
setXxx
Georgiy Korneev
Java Advanced / JavaBeans
5
Типы свойств
Простое (simple)
Индексируемое (indexed)
Связанное (bound)
Ограниченное (constrained)
Georgiy Korneev
Java Advanced / JavaBeans
6
События
Генерируются при изменении свойства
PropertyChangeEvent – событие
getPropertyName() – имя свойства
getOldValue() – старое значение
getNewValue() – новое значение
PropertyChangeListener – слушатель
propertyChange(PropertyChangeEvent) –
получатель события
Georgiy Korneev
Java Advanced / JavaBeans
7
Часть 2
Реализация JavaBean
JavaBean-Класс
Имеет конструктор по умолчанию
Содержит одно или несколько свойств
Georgiy Korneev
Java Advanced / JavaBeans
9
Пример. Простое свойство
Свойство title
Поле
private String title;
Getter
public String getTitle() {
return title;
}
Setter
public void setTitle(String title) {
return this.title = title;
}
Georgiy Korneev
Java Advanced / JavaBeans
10
Реализация связанных свойств
Класс PropertyChangeSupport
PropertyChangeSupport(Object source) –
конструктор
firePropertyChange(name, oldValue, newValue) –
генерация события
addPropertyChangeListener(listener) –
добавление слушателя на все свойства
addPropertyChangeListener(name, listener) –
добавление слушателя на указанное свойство
removePropertyChangeListener(name?, listener)
– удаление слушателя
Georgiy Korneev
Java Advanced / JavaBeans
11
Пример. Связанное свойство
Property change support
private final PropertyChangeSupport pcs =
new PropertyChangeSupport(this);
Setter
public void setTitle(String title) {
String oldValue = this.title;
this.title = title;
pcs.firePropertyChange("title", oldValue, this.title);
}
Georgiy Korneev
Java Advanced / JavaBeans
12
Ограниченные свойства
Процесс установки значения
Сохранение старого значения свойства
Извещение о предстоящем изменении
Установка нового значения
Извещение об установке нового значения
Georgiy Korneev
Java Advanced / JavaBeans
13
Отклонение изменения свойства
VetoableChangeListener – слушатель
vetoableChange(PropertyChangeEvent event) –
событие
PropertyVetoException – бросается при
отклонении изменения
Класс VetoableChangeSupport
fireVetoableChange – сообщение о
предстоящем изменении
addVetoableChangeListener – добавление
removeVetoableChangeListener – удаление
Georgiy Korneev
Java Advanced / JavaBeans
14
Пример. Ограниченное свойство
Vetoable change support
private final VetoableChangeSupport vcs =
new VetoableChangeSupport(this);
Setter
public void setTitle(String title) throws
PropertyVetoException {
String oldValue = this.title;
vcs.fireVetoableChange("title", oldValue, title);
this.title = title;
pcs.firePropertyChange("title", oldValue, title);
}
Georgiy Korneev
Java Advanced / JavaBeans
15
Индексированные свойства
Getter
Setter
setXxx(index, value)
setXxx(Value[])
IndexedPropertyChangeEvent
Value[] getXxx
getXxx(index)
getIndex() – индекс измененного элемента
PropertyChangeSupport
fireIndexedPropertyChange(name, index,
oldValue, newValue) – генерация события
Georgiy Korneev
Java Advanced / JavaBeans
16
Часть 3
Применение JavaBean
Пассивная GUI-компонента (1)
Отображает информацию из модели, не
позволяя ее редактировать
При обновлении модели должна
перерисовываться
Примеры
Индикатор прогресса
Список событий
Georgiy Korneev
Java Advanced / JavaBeans
18
Пассивная GUI-компонента (1)
Компонента
Создание
Перерисовка
Перерисовка
Уничтожение
Georgiy Korneev
Модель
Добавление слушателя
Извещение слушателя
Извещение слушателя
Модификация
Модификация
Удаление слушателя
Java Advanced / JavaBeans
19
Активная GUI-компонента (1)
Отображает информацию из модели, и
позволяет ее редактировать
При обновлении модели должна
перерисовываться
При изменении информации обновляет
модель
Примеры
Полоса прокрутки
Выбор из списка
Текстовое поле
Georgiy Korneev
Java Advanced / JavaBeans
20
Активная GUI-компонента (2)
Компонента
Создание
Модель
Добавление слушателя
Добавление в слушатели
Перерисовка
Модификация
Уничтожение
Georgiy Korneev
Извещение слушателя
Извещение слушателя
Модификация
Извещение
слушателей
Удаление слушателя
Java Advanced / JavaBeans
21
Обрыв цепочки сообщений
Компонента
Модификация
Модель
Установка нового значения
Извещение слушателя
Установка нового значения
Значения
равны
Georgiy Korneev
Извещение слушателя
Java Advanced / JavaBeans
22
Приемы обработки
Хранение данных только в модели
Каскадирование изменений
Все данные хранятся в модели
При изменении данных модель отслеживает
зависимости
Независимые редакторы свойств
При изменении модели изменяется и другая
модель
Явное обновление пассивной компоненты
Слушатель модели обновляет компоненту
Georgiy Korneev
Java Advanced / JavaBeans
23
Часть 4
Хранение JavaBeans
Краткосрочное хранение
Сериализация
Serializable
Externalizable
По умолчанию, списки слушателей не
сериализуются
Georgiy Korneev
Java Advanced / JavaBeans
25
Долговременное хранение
XMLEnconder – сохранение состояния
XMLDecoder – загрузка состояния
Процесс сохранения
Создание объекта конструктором по
умолчанию
Сравнение всех свойств
Georgiy Korneev
При неравенстве – запись свойства
При равенстве – ничего
Java Advanced / JavaBeans
26
Пример. XMLEncoder
JButton button;
XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("button.xml")));
encoder.writeObject(button);
encoder.close();
Georgiy Korneev
Java Advanced / JavaBeans
27
Пример. XMLDecoder
JButton button;
XMLDecoder decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("button.xml")));
button = (JButton) decoder.readObject();
decoder.close();
Georgiy Korneev
Java Advanced / JavaBeans
28
Формат XML-файла
<java> – основной контейнер
<object class=“…”> – объект
<void method=“…”> – вызов метода
<void property=“…”> – установка свойства
<int>, <string>, … – значения
<array> – массив
Georgiy Korneev
Java Advanced / JavaBeans
29
Часть 5
Самоописание
Самоописание (introspection)
Способ описания свойств JavaBean
Преимущества
Переносимость
Повторное использование
Совместимость
Georgiy Korneev
Java Advanced / JavaBeans
31
Описание JavaBean
Интерфейс BeanInfo
Методы
BeanDescriptor getBeanDescriptor() –
дескриптор
PropertyDescriptor[] getPropertyDescriptors() –
описания свойств
EventSetDescriptor[] getEventSetDescriptors() –
дескрипторы групп сообщений
MethodDescriptor[] getMethodDescriptors() –
дескрипторы методов
Класс SimpleBeanInfo
Georgiy Korneev
Java Advanced / JavaBeans
32
Дескриптор возможности
Класс FeatureDescriptor
Методы
getName() – имя возможности
getDisplayName() – отображаемое имя
getShortDescription() – описание возможности
isPreffered(), isExpert(), isHidden() – уровень
видимости
Georgiy Korneev
Java Advanced / JavaBeans
33
Дескриптор свойства
Класс PropertyDescriptor
Методы
getPropertyType() – тип свойства
getReadMethod() – getter
getWriteMethod() – setter
isBound(), isConstrained() – тип свойства
getPropertyEditorClass() – тип редактора
свойства
Класс IndexedPropertyDescriptor
getIndexedRead(Write)Method()
Georgiy Korneev
Java Advanced / JavaBeans
34
Дескриптор группы событий
Класс EventSetDescriptor
Методы
getListenerType() – тип слушателя
getAddListenerMethod() – метод добавления
слушателя
getRemoveListenerMethod() – метод удаления
слушателя
Georgiy Korneev
Java Advanced / JavaBeans
35
Дескриптор метода
Класс MethodDescriptor
Методы
getMethod() – метод
getParameterDescriptors() – дескрипторы
аргументов метода
Класс ParameterDescriptor
Georgiy Korneev
Java Advanced / JavaBeans
36
Получение информации о JavaBean
Класс Introspector
Загрузка информации для
Поиск XxxBeanInfo
Анализ методов
Методы
getBeanInfo(beanClass) – получение описания
getBeanInfo(beanClass, stopClass) – получение
частичного описания
Georgiy Korneev
Java Advanced / JavaBeans
37
GUI-редакторы
Позволяют редактировать свойства
JavaBean
Позволяют добавлять связи по событиям
Позволяют добавлять обработчики
событий
Georgiy Korneev
Java Advanced / JavaBeans
38
Часть 6
Заключение
JavaBean
Класс с конструктором по умолчанию
Содержит свойства
Позволяет добавлять слушателей
Serializable
Georgiy Korneev
Java Advanced / JavaBeans
40
Ссылки
JavaBeans
Specification //
http://java.sun.com/products/javabeans/docs/s
pec.html
JavaBeans
Trail in Java Tutorial //
http://java.sun.com/docs/books/tutorial/javabea
ns/
Long-term JavaBean persistance //
http://java.sun.com/products/jfc/tsc/articles/per
sistence2/
Georgiy Korneev
Java Advanced / JavaBeans
41
Вопросы
СПбГУ ИТМО
Georgiy Korneev
Java Advanced / JavaBeans
42