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. Кроме того, это позволит удалить автоматически генерируемые классы, что упростит модуляризацию клиентской библиотеки.
Тестирование
Нам нужно будет проверить, что новый алгоритм интроспекции ведёт себя так, как ожидается. Также нужно будет проверить, что новый алгоритм интроспекции не нарушает обратную совместимость, или же убедиться, что случаи нарушения совместимости редки.
Риски и допущения
-
Новый алгоритм интроспекции может вести себя несколько иначе, но мы не ожидаем серьёзных нарушений обратной совместимости.
-
Мы не ожидаем снижения производительности. Рефакторинг алгоритма интроспекции может повысить производительность.