openjdk.ruOpenJDK на русском

JEP 256: BeanInfo Annotations

Аннотации BeanInfo

АвторSergey Malenkov
ОтветственныйSergey Bylokhov
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск9
Компонентclient-libs / java.beans
Обсуждениеbeans dash dev at openjdk dot java dot net
ТрудоёмкостьL
ДлительностьL
РецензентыKevin Rushforth, Richard Bair
ОдобренKevin Rushforth
Создан2014/06/04 16:07
Обновлён2017/02/23 16:49
Задача8044826

Аннотация

Заменить Javadoc-теги @beaninfo полноценными аннотациями и обрабатывать эти аннотации во время выполнения, чтобы динамически генерировать классы BeanInfo.

Мотивация

Упростить создание собственных классов BeanInfo и сделать возможной модуляризацию клиентской библиотеки.

Описание

Большинство классов BeanInfo генерируются автоматически во время выполнения, но многие классы Swing по-прежнему генерируют классы BeanInfo из Javadoc-тегов @beaninfo во время компиляции. Мы предлагаем заменить теги @beaninfo следующими аннотациями и расширить существующий алгоритм интроспекции, чтобы он их интерпретировал:

package java.beans;
public @interface JavaBean {
    String description() default "";
    String defaultProperty() default "";
    String defaultEventSet() default "";
}

package java.beans;
public @interface BeanProperty {
    boolean bound() default true;
    boolean expert() default false;
    boolean hidden() default false;
    boolean preferred() default false;
    boolean visualUpdate() default false;
    String description() default "";
    String[] enumerationValues() default {};
}

package javax.swing;
public @interface SwingContainer {
    boolean value() default true;
    String delegate() default "";
}

Подробнее см. Javadoc для JavaBean, BeanProperty и SwingContainer.

Эти аннотации будут задавать соответствующие атрибуты возможностей при генерации BeanInfo во время выполнения. Разработчикам будет проще указывать эти атрибуты прямо в классах Bean, чем создавать отдельный класс BeanInfo для каждого класса Bean. Кроме того, это позволит удалить автоматически генерируемые классы, что упростит модуляризацию клиентской библиотеки.

Тестирование

Нам нужно будет проверить, что новый алгоритм интроспекции ведёт себя так, как ожидается. Также нужно будет проверить, что новый алгоритм интроспекции не нарушает обратную совместимость, или же убедиться, что случаи нарушения совместимости редки.

Риски и допущения

  • Новый алгоритм интроспекции может вести себя несколько иначе, но мы не ожидаем серьёзных нарушений обратной совместимости.

  • Мы не ожидаем снижения производительности. Рефакторинг алгоритма интроспекции может повысить производительность.