Spec-Zone.ru › OpenJDK 8

Тип аннотации DescriptorKey


@Documented
 @Retention(value=RUNTIME)
 @Target(value=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

public abstract 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.

Spec-Zone.ru

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