@Documented @Retention(RUNTIME) @Target(METHOD) public @interface DescriptorKey
注釈要素とDescriptor内のフィールドとの関係を記述するメタ注釈です。 MBean、MBean内の属性、オペレーション、コンストラクタ、あるいはオペレーションまたはコンストラクタのパラメータ用のDescriptorを注釈要素にできます。 
例として、次のような注釈について考えます。
 @Documented
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Units {
     @DescriptorKey("units")
     String value();
 }
 
 この注釈を次のように使用できます。
 public interface CacheControlMBean {
     @Units("bytes")
     public long getCacheSize();
 }
 
 Standard MBeanがCacheControlMBeanから作成される場合、通常のルールでは、long型のCacheSizeという名前の属性になります。 上記の定義が指定された場合、@Units注釈により、この属性のMBeanAttributeInfoには、対応する値bytesを持つunitsという名前のフィールドがあるDescriptorが含まれるようになります。 
同様に、次のような注釈について考えます。
 @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などの注釈の適用先を次に示します。
- Standard MBeanまたはMXBeanインタフェース
- この種のインタフェース内のメソッド
- Standard MBeanまたはMXBeanインタフェース内のメソッドのパラメータ(そのメソッドが属性のgetterでもsetterでもなく、オペレーションである場合)
- Standard MBeanまたはMXBeanを実装するクラス内のpublicコンストラクタ
- この種のコンストラクタ内のパラメータ
上記以外の注釈の使用法は、無視されます。
インタフェース注釈のチェックは、親インタフェース上ではなく、Standard MBeanまたはMXBeanの管理インタフェースを定義するインタフェース上のみで行われます。 メソッド注釈のチェックは、そのメソッドが出現するもっとも限定的なインタフェースで行われます。つまり、子インタフェースが親インタフェースからのメソッドをオーバーライドする場合、子インタフェース内のメソッドの@DescriptorKey注釈のみが考慮されます。 
 
同一のプログラム要素上のさまざまな注釈が、この方法でDescriptorフィールドに寄与する場合、Descriptorフィールドは一致している必要があります。 つまり、2つの異なる注釈、または1つの注釈の2つのメンバーが、同一のDescriptorフィールドに異なる値を定義することはできません。 getterメソッドの注釈に由来するフィールドは、対応するsetterメソッドの注釈に由来するフィールドとも一致している必要があります。
これらの注釈から生成されるDescriptorは、MBeanの immutableInfoフィールドなどの、実装の提供するすべてのDescriptorフィールドとマージされます。 注釈に由来するフィールドは、実装により提供されるこれらのフィールドと一致している必要があります。 
注釈要素を記述子フィールドに変換する場合は、注釈要素をJava言語で許可される任意の型にできます。ただし、注釈または注釈の配列は除きます。 このフィールドの値は、次に示すように注釈要素の値から導かれます。
| 注釈要素 | Descriptorフィールド | 
|---|---|
| プリミティブ値( 5、falseなど) | ラップされた値( Integer.valueOf(5)、Boolean.FALSEなど) | 
| クラス定数( Thread.classなど) | Class.getName()から取得したクラス名("java.lang.Thread"など) | 
| 列挙型定数( ElementType.FIELDなど) | Enum.name()から取得した定数名("FIELD"など) | 
| クラス定数またはenum定数の配列 | これらのルールを各要素に適用して得られる文字列配列 | 
| その他の型の値 ( String、String[]、int[]など) | 同じ値 | 
- 導入されたバージョン:
- 1.6