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