Интерфейс аннотаций DescriptorKey
@Documented @Retention(RUNTIME) @Target(METHOD) public @interface DescriptorKey
Мета-аннотация, описывающая, как элемент аннотации связан с полем в Descriptor. Это может быть описатель (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();
}
Когда Standard MBean создается из CacheControlMBean, стандартные правила означают, что он будет иметь атрибут, называемый CacheSize типа long. Аннотация @Units, учитывая приведенное выше определение, обеспечит, что MBeanAttributeInfo для этого атрибута будет иметь 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 будет содержать следующие поля:
| Имя | Значение |
|---|---|
| units | "bytes" |
| descriptionResourceKey | "bytes.key" |
| descriptionResourceBundleBaseName | "com.example.foo.MBeanResources" |
Аннотация, такая как @Units, может быть применена к:
- интерфейсу Standard MBean или MXBean;
- методу в таком интерфейсе;
- параметру метода в интерфейсе Standard MBean или MXBean, когда этот метод является операцией (а не геттером или сеттером для атрибута);
- публичному конструктору в классе, реализующем Standard MBean или MXBean;
- параметру в таком конструкторе.
Другие использования аннотации игнорируются.
Аннотации интерфейсов проверяются только на точном интерфейсе, который определяет интерфейс управления Standard MBean или MXBean, а не на его родительских интерфейсах. Аннотации методов проверяются только в самом специфичном интерфейсе, в котором появляется метод; другими словами, если дочерний интерфейс переопределяет метод из родительского интерфейса, учитываются только @DescriptorKey аннотации в методе в дочернем интерфейсе.
Поля описателя (Descriptor), внесённые таким образом различными аннотациями к одному элементу программы, должны быть согласованы. То есть, две различные аннотации, или два члена одной и той же аннотации, не должны определять разные значения для одного и того же поля Descriptor. Поля от аннотаций на методе-геттере также должны быть согласованы с полями от аннотаций на соответствующем методе-сеттере.
Описание (Descriptor), полученный из этих аннотаций, будет объединён с любыми полями описателя (Descriptor), предоставленными реализацией, такими как поле
immutableInfo для MBean. Поля от аннотаций должны быть согласованы с этими полями, предоставленными реализацией.
Элемент аннотации, который должен быть преобразован в поле описателя, может быть любого типа, разрешённого языком Java, за исключением аннотации или массива аннотаций. Значение поля выводится из значения элемента аннотации следующим образом:
| Элемент аннотации | Поле описателя |
|---|---|
Примитивное значение (5, false, и т.д.) | Обёрнутое значение (Integer.valueOf(5), Boolean.FALSE, и т.д.) |
Постоянная класса (например, Thread.class) | Имя класса из Class.getName() (например, "java.lang.Thread") |
Постоянная перечисления (например, ElementType.FIELD) | Имя константы из Enum.name() (например, "FIELD") |
| Массив постоянных классов или перечислений | Строковый массив, полученный путём применения этих правил к каждому элементу |
| Значение любого другого типа ( String, String[], int[], и т.д.) | То же самое значение |
- С момента:
- 1.6
Краткое описание обязательных элементов
| Модификатор и тип | Обязательный элемент | Описание |
|---|---|---|
String |
value |
Возвращает ключ описателя. |
Подробное описание элементов
value
String value
- Возвращает:
- ключ описателя
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.management/javax/management/DescriptorKey.html