Spec-Zone.ru › OpenJDK 25

Интерфейс аннотации 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 "bytes"
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
Возвращает ключ дескриптора.
Возвращает:
ключ дескриптора

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.management/javax/management/DescriptorKey.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API