Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот документ описывает изменения к пакету java.beans, которые были представлены в версии 1.4 Java 2 Платформы, Standard Edition:
Чтобы поддерживать долгосрочную персистентность, следующие классы были добавлены:
Класс | Описание |
---|---|
Statement |
Объект, который представляет вызов метода, возможно с параметрами, на объект. Например: a.setFoo(b) . |
Expression |
Оператор, который возвращает результат. Например: a.getFoo() . |
XMLDecoder |
XML-документы чтений, которые создавались, используя XMLEncoder . |
Encoder |
Персистентность использования делегирует, чтобы разломать граф объектов на серия Statement s и Expression s, который может использоваться, чтобы воссоздать это. |
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: FeatureDescriptor
s теперь совместно используются на на -BeanInfo
основание, а не скопированный, когда BeanInfo
возвращается. Это изменение улучшает производительность getBeanInfo
метод. Это также означает что когда атрибут/значение в a FeatureDescriptor
изменения, то изменение является персистентным среди getBeanInfo
вызовы пока BeanInfo
не собирается "мусор". (Сборка "мусора" BeanInfo
s описывается в Сборке "мусора" и Пользовательских атрибутах.)getBeanInfo
методы больше не создают копию требуемого BeanInfo
. Вместо этого они кэшируются BeanInfo
и возвратите это. В случае необходимости можно получить старое поведение, храня ссылку на возвращенный BeanInfo
и использование flushFromCaches
метод, чтобы сбросить class боба от кэша introspector.instantiate
метод не может инстанцировать определенного class, используя одноуровневый элемент или загрузить загрузчик class, это теперь пытается загрузить class, используя загрузчик class текущего потока.С v 1.4, a BeanInfo
может быть собран "мусор", когда никакие прямые ссылки на это не существуют, и система низка на памяти. Это реализуется в Introspector
переносясь BeanInfo
s в SoftReference
s.
Возможность сборки "мусора" влияет, как Вы храните пользовательские атрибуты внутри BeanInfo
s. Если деталь 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); }