Spec-Zone .ru
спецификации, руководства, описания, API
|
@Documented @Retention(value=RUNTIME) @Target(value=METHOD) public @interface DescriptorKey
Метааннотация, которая описывает, как элемент аннотации касается поля в a 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(); }
Когда Стандартный MBean делается из CacheControlMBean
, обычные правила означают, что этому вызовут атрибут CacheSize
из типа long
. @Units
аннотация, данная вышеупомянутое определение, гарантирует что MBeanAttributeInfo
поскольку у этого атрибута будет a 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
будет содержать следующие поля:
Имя | Значение |
---|---|
модули | "байты" |
descriptionResourceKey | "bytes.key" |
descriptionResourceBundleBaseName | "com.example.foo. MBeanResources" |
Аннотация такой как @Units
может быть применен к:
Другое использование аннотации игнорируется.
Интерфейсные аннотации проверяются только в точном интерфейсе, который определяет интерфейс управления Стандартного MBean или MXBean, не в его родительских интерфейсах. Аннотации метода проверяются только в самом определенном интерфейсе, в котором появляется метод; другими словами, если дочерний интерфейс переопределяет метод от родительского интерфейса, только @DescriptorKey
аннотации в методе в дочернем интерфейсе рассматривают.
Поля Descriptor, внесенные таким образом различными аннотациями на тот же самый элемент программы, должны быть непротиворечивыми. Таким образом, две различных аннотации, или два элемента той же самой аннотации, не должны определить различное значение для того же самого поля Descriptor. Поля из аннотаций на метод метода get должны также быть непротиворечивыми с полями из аннотаций на соответствующий метод метода set.
Дескриптор, следующий из этих аннотаций, будет объединен с любыми полями 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[] , и т.д.) |
То же самое значение |
public abstract String value
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.