|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот документ описывает изменения к пакету java.beans, которые были представлены в версии 1.4 Java 2 Платформы, Standard Edition:
Чтобы поддерживать долгосрочную персистентность, следующие классы были добавлены:
| Класс | Описание |
|---|---|
Statement |
Объект, который представляет вызов метода, возможно с параметрами, на объект. Например: a.setFoo(b). |
Expression |
Оператор, который возвращает результат. Например: a.getFoo(). |
XMLDecoder |
XML-документы чтений, которые создавались, используя XMLEncoder. |
Encoder |
Персистентность использования делегирует, чтобы разломать граф объектов на серия Statements и Expressions, который может использоваться, чтобы воссоздать это. |
XMLEncoder |
Encoder это производит операторы и выражения в кодировании XML. |
PersistenceDelegate |
Абстрактный class, который определяет объекты, которые могут выразить состояние другого объекта, используя открытые методы class того объекта. |
DefaultPersistenceDelegate |
Делегат персистентности использовал, по умолчанию, для бобов. |
См. Компонентный API JavaBeans для ссылок туда, где можно найти больше информации о долгосрочной персистентности.
Следующие классы были также добавлены в v1.4:
| Класс | Описание |
|---|---|
EventHandler |
Оказывает поддержку для того, чтобы динамически генерировать слушателей события, которые имеют маленькое место и могут быть сохранены автоматически схемой персистентности. |
ExceptionListener |
Определяет слушателя, чтобы быть уведомленным, когда исключение было выдано, но тогда восстановилось с. Можно зарегистрировать слушателя исключения на XMLEncoder или XMLDecoder объект, который будет уведомлен, когда объект встречается с восстанавливаемой проблемой при записи или читая боб. |
PropertyChangeListenerProxy |
Прокси, который реализует PropertyChangeListener и подачи, чтобы сгруппировать другого PropertyChangeListener (обработчик реального события) с определенным свойством; прокси передает события изменения свойства к обработчику реального события. |
VetoableChangeListenerProxy |
Прокси, который реализует VetoableChangeListener и подачи, чтобы сгруппировать другого VetoableChangeListener (обработчик реального события) с определенным ограниченным свойством; прокси вперед vetoable события изменения свойства к обработчику реального события. |
У следующих классов есть дополнительные методы:
PropertyChangeSupport class теперь содержит метод без параметров, чтобы добраться, все зарегистрированное свойство изменяют слушателей:
getPropertyChangeListeners.VetoableChangeSupport class теперь содержит метод без параметров, чтобы добраться, все зарегистрированные vetoable изменяют слушателей:
getVetoableChangeListeners.Introspector class был повторно реализован, и его производительность улучшилась. Новая реализация вызвала следующие изменения в поведении introspector: FeatureDescriptors теперь совместно используются на на -BeanInfo основание, а не скопированный, когда BeanInfo возвращается. Это изменение улучшает производительность getBeanInfo метод. Это также означает что когда атрибут/значение в a FeatureDescriptor изменения, то изменение является персистентным среди getBeanInfo вызовы пока BeanInfo не собирается "мусор". (Сборка "мусора" BeanInfos описывается в Сборке "мусора" и Пользовательских атрибутах.)getBeanInfo методы больше не создают копию требуемого BeanInfo. Вместо этого они кэшируются BeanInfo и возвратите это. В случае необходимости можно получить старое поведение, храня ссылку на возвращенный BeanInfo и использование flushFromCaches метод, чтобы сбросить class боба от кэша introspector.instantiate метод не может инстанцировать определенного class, используя одноуровневый элемент или загрузить загрузчик class, это теперь пытается загрузить class, используя загрузчик class текущего потока.С v 1.4, a BeanInfo может быть собран "мусор", когда никакие прямые ссылки на это не существуют, и система низка на памяти. Это реализуется в Introspector переносясь BeanInfos в SoftReferences.
Возможность сборки "мусора" влияет, как Вы храните пользовательские атрибуты внутри BeanInfos. Если деталь BeanInfo собирается "мусор", тогда в следующий раз, когда Вы вызываете Introspector.getBeanInfo добраться BeanInfo, возвращенный объект не будет содержать пользовательских атрибутов.
Избегать этой проблемы, если Вы храните пользовательские атрибуты внутри a BeanInfo следует гарантировать что BeanInfo правильно инициализируется с теми атрибутами каждый раз, когда Вы получаете BeanInfo. Следующее является примером инициализации a BeanInfo class с пользовательским свойством в бобовом дескрипторе. Код был бы подобен для пользовательского атрибута в дескрипторе свойства, дескрипторе метода, или дескрипторе набора события.
BeanInfo beanInfo = getBeanInfo(SomeBean.class);
BeanDescriptor beanDescriptor = beanInfo.getBeanDescriptor();
/*
* Before using the BeanInfo, check to see if our custom
* property has been initialized. (Even if we initialized
* it before, if the BeanInfo has been garbage collected,
* then we need to initialize it again.) Since our custom
* property's value could be null, we define another property
* to tell us if the custom property is initialized.
*/
if (beanDescriptor.getValue("myProperty_init") == null) {
beanDescriptor.setValue("myProperty", someValue);
beanDescriptor.setValue("myProperty_init", Boolean.TRUE);
}