Описание типа аннотации 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 для этого атрибута будет иметь 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 | "байты" |
| descriptionResourceKey | "bytes.key" |
| descriptionResourceBundleBaseName | "com.example.foo.MBeanResources" |
Такая аннотация, как @Units, может быть применена к:
- интерфейсу стандартного MBean или MXBean;
- методу в таком интерфейсе;
- параметру метода в интерфейсе стандартного MBean или MXBean, когда этот метод является операцией (а не геттером или сеттером для атрибута);
- общественному конструктору в классе, реализующем стандартный MBean или MXBean;
- параметру такого конструктора.
Другие использования аннотации игнорируются.
Аннотации интерфейсов проверяются только на точном интерфейсе, определяющем интерфейс управления стандартного MBean или MXBean, а не на его родительских интерфейсах. Аннотации методов проверяются только в самом специфичном интерфейсе, в котором появляется метод; другими словами, если дочерний интерфейс переопределяет метод из родительского интерфейса, то учитываются только аннотации @DescriptorKey в методе в дочернем интерфейсе.
Поля дескриптора, внесённые таким образом разными аннотациями в одном и том же элементе программы, должны быть согласованными. То есть, две разные аннотации или два члена одной аннотации не должны определять разные значения для одного и того же поля дескриптора. Поля из аннотаций на методе-геттере также должны быть согласованы с полями из аннотаций на соответствующем методе-сеттере.
Дескриптор, полученный из этих аннотаций, будет объединён с любыми полями дескриптора, предоставляемыми реализацией, такими как поле
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, 2020, 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/11/docs/api/java.management/javax/management/DescriptorKey.html