Преобразование обычного свойства в связное:
добавить в класс компонента строку private PropertyChangeSupport pcs = new PropertyChangeSupport(this); добавить addPropertyChangeListener и removePropertyChangeListener. При этом можно использовать одноименные методы объекта pcs. Сохранить старое значение свойства. Запустить событие изменения свойства, когда оно изменится.Ограниченные свойства
Классы - аналогичны.
При изменении свойства приемник сообщения получает уведомление и может запретить изменения путем выброса исключения PropertyVetoException. Для преобразования обычного свойства в ограниченное:
Добавить в класс поле VetoableChangeSupport Добавить в класс методы addVetoableChangeListener() и removeVetoableChangeListener() Поместить каждую попытку изменения свойства в блок try-catch, который перехватывает исключительные ситуации запрета свойств Запустить событие изменения свойства перед изменением свойства.30. Технология компонентного программирования JavaBeans: понятие интроспекции; понятие сериализации
Отражение
Отражение (рефлексия) – способность программ к самоанализу, к динамическому исследованию классов. Обеспечивается набором метаклассов пакета java. lang. reflect и классами java. lang. Class и java. lang. Package. Механизм отражения позволяет создавать экземпляры класса, вызывать методы, работать с полями. используя имя класса, отсутствующего в момент написания программы, можно получить соответствующий объект Class и использовать его для создания экземпляра.
Отражение предназначено для использования не прикладными программистами, а разработчиками средств визуального проектирования. Компоновщики используют рефлексию для загрузки компонентов и предоставления разработчику информации о признаках компонента. отражение поддерживает сериализацию и технологию RMI.
- Класс Class. Представляет класс в языке Java. Его возможности:
1. Загрузка класса по имени на этапе выполнения и получение для него объекта Class.
public static Class forName (String name) throws ClassNotFoundException, где name – квалифицированное имя класса. Предполагается использование загрузчика по умолчанию и выполнение инициализации класса.
2. Создание экземпляра класса
public Object newInstance(). При инициализации используется конструктор без параметров.
3. Методы get позволяют получит информацию о суперклассе, реализуемых интерфейсах, модификаторах, членах класса, конструкторах, методах, внутренних классах, объявленных членах. Классы пакета java. lang. reflect
- Constructor, Field и Method реализуют интерфейс Member Array (позволяет динамически создавать массивы и работать с ними) Modifier (представляет модификаторы, ипользующиеся в объявлении классов, методов, полей
Field – методы get(), set() значение поля объекта.
Constructor – метод newInstance(), который позволяет создавать объекты, используя конструктор с параметрами.
Method – метод invoke, который позволяет вызвать данный метод.
Исключение InvocationTargetЕхсерtion.
Интроспекция
Интроспекция – процесс определения свойств, событий и методов компонента с целью предоставления разработчику приложения этой информации. Поддерживается механизмом отражения. Имеется несколько классов, которые поддерживают интроспекцию.
java. bean. Introspector. Используется компоновщиком. для анализа загружаемых компонентов. свойства + события + методы = признаки (features)
В классе Introspector есть static-методы, возвращающие объекты BeanInfo для компонентов.
public static BeanInfo get BeanInfo(Class beanClass) throws IntrospectorException
Интроспектор ищет класс BeanInfo, ассоциированный с компонентом. Если он есть – он возвращается, иначе – создается на основе соглашений об именах.
BeanInfo – интерфейс пакета java. beans. Объект, который его реализует, имеет методы, которые возвращают массив дескрипторов признаков.
getPropertyDescriptor, getEventSetDescriptor, getMethodDescriptor и еще 4 метода. public abstract Image getIcon(int iconKind).
Дескрипторы – объекты соответствующих классов пакета java. beans.
FeatureDescriptor
PropertyDescriptor
EventSetDescriptor
MethodDescriptor
Если нет BeanInfo – интроспектор использует рефлексию для определения признаков. Она основана на соглашении об именах. BeanInfo позволяет изменять и ограничивать информацию о признаках. Обычно класс BeanInfo наследуется от класса SimpleBeanInfo. Класс BeanInfo должен находиться в том же пакете и иметь такое же имя с добавлением BeanInfo. Архивируется в jar-файл вместе с классом.
Сериализация
Сериализация – процесс преобразования объекта в поток байтов с учетом его состояния. Десериализация – восстановление объекта из данных потока. Состояние объекта полностью определяется значением его полей, которые не являются static или transient-полями.
С помощью сериализации можно сохранять настроенные и связанные объекты и восстанавливать их. Чтобы гарантировать сериализуемость, необходимо реализовать интерфейс Serializable. Это интерфейс-маркер, т. е. пустой интерфейс. Он просто указывает, что объект может быть сериализован.
для правильной сериализации необходимо, чтобы все объекты, ссылки на которые содержит данный объект, были сериализуемыми, т. е. сериализуемым должен быть т. н. граф объекта.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


