Где происходит обработка аннотации? - PullRequest
4 голосов
/ 29 января 2012

В последнее время я читаю об аннотациях, и я немного растерялся. Я использовал аннотацию @ NotNull , но я не знаю, как она проверяет, не является ли переменная нулевой. Нет, где в коде я вижу что-либо, проверяющее значения на ноль. Это имеет смысл, потому что это интерфейс, поэтому где происходит фактическая обработка и почему это местоположение не указано в коде? Примеры, которые я видел, обычно создают аннотацию, которая принимает значения, но больше ничего не делает, поэтому я не понимаю, где происходит реализация.

1 Ответ

5 голосов
/ 29 января 2012

Аннотация - это просто метаданные, не более и не менее.Когда вы хотите указать некоторые детали о классе, вы помещаете в него аннотации.Думайте о них (в некоторой степени) как об альтернативе старому хорошо известному XML-способу определения метаданных.

Теперь очевидно, что кто-то читает ваш XML и запускает код, который что-то создает с метаданными.То же самое происходит с аннотациями: фреймворк, которому принадлежит аннотация, отвечает за чтение аннотации и создание чего-либо с этой информацией.В случае @NotNull это проект hibernate-validator.API, предоставляемый java, позволяет получить доступ к информации в аннотациях путем отражения (классы типа java.lang.Class, Method, Field и т. Д.).Итак, где-то внутри валидатора hibernate есть код, который идет в ваш класс, читает аннотации путем отражения и проверяет, придерживается ли класс этих аннотаций.Эти аннотации обычно имеют политику хранения «время выполнения», что означает, что они сохраняются в байт-коде и загружаются вместе с классом, который несет эти аннотации.

Существуют также аннотации, которые должны обрабатываться компилятором Java.Как @Deprecated, @SuppressWarnings и так далее.Преимущество такой аннотации состоит в том, что вы можете обнаружить некоторые проблемы с кодом на этапе компиляции.

Вы также можете разместить процессоры аннотаций и «подключить» их на этапе компиляции, но это совсем другая история.

Надеюсь, это немного прояснит использование аннотаций

...