Когда выполняются аннотации Java? - PullRequest
9 голосов
/ 17 февраля 2012

Я просто хочу написать аннотацию, которая может выполняться во время выполнения, до или сразу после вызова метода службы.

Я не знаю, выполняются ли они во время выполнения или во время компиляции.

Ответы [ 7 ]

11 голосов
/ 17 февраля 2012

Аннотации не выполняются;это заметки или маркеры, которые читаются различными инструментами.Некоторые из них читаются вашим компилятором, например @Override;другие встраиваются в файлы классов и читаются такими инструментами, как Hibernate во время выполнения.Но они ничего не делают сами.

Возможно, вы думаете о утверждениях , которые можно использовать для проверки условий до и после.

8 голосов
/ 17 февраля 2012

На самом деле, когда вы определяете аннотацию, вы должны указать параметр @Retention, который определяет, доступна ли аннотация в исходном коде (SOURCE), в файлах классов (CLASS) или во время выполнения (RUNTIME)..

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}
7 голосов
/ 17 февраля 2012

Аннотации - это просто маркеры. Они не выполняют и ничего не делают.

Вы можете указать различные политики хранения:

  • SOURCE: аннотация сохраняется только в исходном файле и удаляется во время компиляции.
  • CLASS: аннотация, хранящаяся в файле .class во время компиляции, недоступная во время выполнения.
  • RUNTIME: аннотация, сохраненная в файле .class и доступная во время выполнения.

Подробнее здесь: http://www.java2s.com/Tutorial/Java/0020__Language/SpecifyingaRetentionPolicy.htm

3 голосов
/ 17 февраля 2012

Аннотации не влияют на ваш код, они здесь, чтобы предоставить информацию для оценки компилятором или другими инструментами.

Аннотации имеют ряд применений, среди них:

Информация для компилятора - аннотации могут использоваться компилятором для обнаружения ошибок или подавления предупреждений.

Обработка во время компиляции и во время развертывания - программные инструменты могут обрабатывать информацию аннотаций для генерации кода, файлов XML и т. Д.

Обработка во время выполнения - некоторые аннотации доступны для изучения во время выполнения.

См. Эту страницу .

1 голос
/ 06 августа 2018

Это зависит от политики хранения, прилагаемой к этой аннотации.

  • Политика хранения определяет, в какой момент аннотация должна быть отбрасываются. Java определила 3 ​​типа политик хранения через java.lang.annotation.RetentionPolicy перечисление.

  • Имеет ИСТОЧНИК, КЛАСС и РАБОТУ.

  • Аннотация с политикой хранения SOURCE будет сохраняться только с исходный код и отбрасывается во время компиляции.

  • Аннотация с политикой хранения CLASS будет сохраняться до
    компилировать код и отбрасывать во время выполнения.

  • Аннотация с политикой хранения RUNTIME будет доступна для JVM через время выполнения.

  • Политика хранения будет указана с использованием встроенного Java аннотация @Retention, и мы должны пройти политику хранения тип.

  • Тип политики хранения по умолчанию - КЛАСС.

0 голосов
/ 29 ноября 2014
  1. Аннотации являются только маркерами в исходном коде. Они будут использоваться такими инструментами, как IDE, компилятор или процессоры аннотаций.

  2. Вы можете определить с помощью @Retention, должна ли аннотация оцениваться в источнике, классе или среде выполнения.

  3. Если вы хотите определить свои собственные аннотации, и только вы знаете, что делать с аннотацией, вам следует написать и процессор аннотаций. (но это не просто - возможно)

0 голосов
/ 17 февраля 2012

На самом деле их можно прочитать в обеих средах, в зависимости от установленной вами политики хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...