Spec-Zone.ru › OpenJDK 21

Интерфейс аннотаций 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 будет содержать следующие поля:

Descriptor Fields
Имя Значение
units "bytes"
descriptionResourceKey "bytes.key"
descriptionResourceBundleBaseName "com.example.foo.MBeanResources"

Аннотация, такая как @Units может быть применена к:

  • интерфейсу Standard MBean или MXBean;
  • методу в таком интерфейсе;
  • параметру метода в интерфейсе Standard MBean или MXBean, когда этот метод является операцией (не геттером или сеттером для атрибута);
  • публичному конструктору в классе, реализующем Standard MBean или MXBean;
  • параметру в таком конструкторе.

Другие использования аннотации игнорируются.

Аннотации интерфейса проверяются только на точном интерфейсе, определяющем интерфейс управления Standard 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, 2023, 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/21/docs/api/java.management/javax/management/DescriptorKey.html

Spec-Zone.ru

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