注解 DescriptorKey


@Documented @Retention (RUNTIME ) @Target (METHOD ) public @interface DescriptorKey

描述注解元素如何与 Descriptor 中的字段相关的元注释。这可以是 MBean 的描述符,也可以是 MBean 中的属性、操作或构造函数,或者操作或构造函数的参数。

例如考虑这个注解:

 @Documented
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Units {
   @DescriptorKey("units")
   String value();
 }
 

以及注释的使用:

 public interface CacheControlMBean {
   @Units("bytes")
   public long getCacheSize();
 }
 

当从 CacheControlMBean 生成标准 MBean 时,通常的规则意味着它将具有一个类型为 long 的名为 CacheSize 的属性。给定上述定义,@Units 注释将确保此属性的 MBeanAttributeInfo 将具有一个 Descriptor,该 Descriptor 具有一个名为 units 的字段,对应值为 bytes

同样,如果注释看起来像这样:

 @Documented
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Units {
   @DescriptorKey("units")
   String value();

   @DescriptorKey("descriptionResourceKey")
   String resourceKey() default "";

   @DescriptorKey("descriptionResourceBundleBaseName")
   String resourceBundleBaseName() default "";
 }
 

它是这样使用的:

 public interface CacheControlMBean {
   @Units("bytes",
      resourceKey="bytes.key",
      resourceBundleBaseName="com.example.foo.MBeanResources")
   public long getCacheSize();
 }
 

那么生成的 Descriptor 将包含以下字段:

描述符字段
Name Value
单位 "bytes"
描述资源键 “bytes.key”
描述ResourceBundleBaseName “com.example.foo.MBeanResources”

诸如 @Units 之类的注释可以应用于:

  • 标准 MBean 或 MXBean 接口;
  • 这种接口中的方法;
  • 标准 MBean 或 MXBean 接口中方法的参数,当该方法是一个操作时(不是属性的 getter 或 setter);
  • 实现标准 MBean 或 MXBean 的类中的公共构造方法;
  • 这种构造方法中的一个参数。

注释的其他用途将被忽略。

仅在定义 Standard MBean 或 MXBean 的管理接口的确切接口上检查接口注释,而不在其父接口上检查。方法注释只在方法出现的最具体的接口中被检查;换句话说,如果子接口覆盖父接口的方法,则只考虑子接口方法中的@DescriptorKey注解。

同一程序元素上的不同注释以这种方式贡献的描述符字段必须是一致的。也就是说,两个不同的注解,或者同一个注解的两个成员,不能为同一个 Descriptor 字段定义不同的值。来自 getter 方法注释的字段也必须与来自相应 setter 方法注释的字段一致。

这些注释产生的描述符将与实现提供的任何描述符字段合并,例如 MBean 的 immutableInfo 字段。注释中的字段必须与实现提供的这些字段一致。

要转换为描述符字段的注解元素可以是 Java 语言允许的任何类型,但注释或注释数组除外。该字段的值源自注解元素的值,如下所示:

描述符字段类型
注解元素 描述符域
原始值(5false 等) 包装值(Integer.valueOf(5)Boolean.FALSE 等)
类常量(例如 Thread.class 来自 Class.getName() 的类名(例如 "java.lang.Thread"
枚举常量(例如 ElementType.FIELD 来自 Enum.name() 的常量名称(例如 "FIELD"
类常量或枚举常量数组 通过将这些规则应用于每个元素派生的字符串数组
任何其他类型的值
StringString[]int[] 等)
相同的值
自从:
1.6
  • 必需元素摘要

    必需的元素
    修饰符和类型
    必需元素
    描述
    返回描述符键。
  • 元素详细信息

    • value

      String  value
      返回描述符键。
      返回:
      描述符键