Skip to content

JEP 256: BeanInfo Annotations | BeanInfo 注解

摘要

@beaninfo Javadoc 标签替换为适当的注解,并在运行时处理这些注解以动态生成 BeanInfo 类。

动机

简化自定义 BeanInfo 类的创建,并实现客户端库的模块化。

描述

大多数 BeanInfo 类是在运行时自动生成的,但是许多 Swing 类仍然会在编译时从 @beaninfo Javadoc 标签生成 BeanInfo 类。我们建议将 @beaninfo 标签替换为以下注解,并扩展现有的内省算法来解释它们:

java
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 "";
}

更多详细信息,请参阅 JavaBeanBeanPropertySwingContainer 的 Javadoc。

这些注解将在运行时生成 BeanInfo 时设置相应的特性属性。开发人员可以直接在 Bean 类中指定这些属性,而不必为每个 Bean 类创建单独的 BeanInfo 类。它还允许删除自动生成的类,从而更容易实现客户端库的模块化。

测试

我们需要验证新的内省算法是否按预期工作。我们还需要验证新的内省算法是否不会破坏向后兼容性,或者确保破坏兼容性的情况很少。

风险和假设

  • 新的内省算法可能会有一些不同的行为,但我们不认为会有任何严重的向后不兼容性。

  • 我们不期望出现任何性能下降。内省算法的重构可能会改善性能。