Module java.management
Package javax.management

Annotation Interface 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时,通常规则意味着它将具有名为CacheSize的类型为long的属性。根据上述定义,@Units注解将确保此属性的MBeanAttributeInfo将具有一个名为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将包含以下字段:

描述符字段
名称
units "bytes"
descriptionResourceKey "bytes.key"
descriptionResourceBundleBaseName "com.example.foo.MBeanResources"

诸如@Units的注解可以应用于:

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

忽略注解的其他用法。

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

通过对同一程序元素上不同注解的贡献,以此方式生成的描述符字段必须一致。也就是说,两个不同的注解或同一注解的两个成员不能为同一描述符字段定义不同的值。来自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
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    返回描述符键。
  • Element Details

    • value

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