JEP 256: BeanInfo 注解
概述
用适当的注解替换 @beaninfo
Javadoc 标签,并在运行时处理这些注解,以动态生成 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 "";
}
更多细节,请参见 JavaBean、BeanProperty 和 SwingContainer 的 Javadoc。
这些注解将在运行时 BeanInfo
生成过程中设置相应的特性属性。相比为每个 Bean 类创建一个单独的 BeanInfo
类,开发者能够更方便地直接在 Bean 类中指定这些属性。同时,这也允许移除自动生成的类,从而更轻松地实现客户端库的模块化。
测试
我们需要验证新的内省算法是否按预期运行。我们还需要验证新的内省算法不会破坏向后兼容性,或者确保兼容性被破坏的情况很少出现。
风险与假设
-
新的内省算法的行为可能有所不同,但我们不预期会出现任何严重的向后兼容性问题。
-
我们不预期会有性能下降。内省算法的重构可能会提升性能。