Как аннотации (к примеру, @Retention) могут аннотировать сами себя?

162
15 сентября 2019, 10:10
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}

Тут видно, что аннотация @Retention стоит собственно над объявлением самой аннотации @Retention. И такой трюк можно делать не только с мета-аннотациями, а и с обычными, рукотворными. Где происходит магия при загрузке классов аннотаций, и почему это всё работает?

Answer 1

Никакой магии нет. Все аннотации обрабатываются на этапе компиляции. В общем случае, аннотирование аннотации дает наследование. На примере Spring, есть аннотация @Component, которая сигнализирует, что аннотированный класс является бином, который должен быть обработан Spring-ом. Так же есть аннотация @Service, которая якобы сообщает нам, что аннотированный класс является сервисом. На самом деле аннотация @Service помечена аннотацией @Component, поэтому Spring также понимает такой класс как свой бин. А название Service дано просто для удобочитаемости кода. Вы можете написать свои аннотации, пометить их другими аннотациями, тем самым унаследуете свойства этих аннотаций. К @RetentionPolicy и @Target это не относится, они обрабатываются по-своему. Для более глубокого погружения в тему гуглите Java Annotation Processing.

READ ALSO
проблема с Tomcat application context?

проблема с Tomcat application context?

Есть crud приложениеСервер томкэт деплоит его с адресом localhost:8080/GA_war_exploded/

150
Исправить ошибки, реализовать метод toString()

Исправить ошибки, реализовать метод toString()

Создать интерфейс IntList и его реализацию IntArrayList по аналогии с List<Integer>

151
grid-template-columns и grid-column

grid-template-columns и grid-column

Допустимо ли применять к одному блоку сразу display: grid, grid-template-columns и grid-column?

155
Строка SVG не отображается внутри clipPath

Строка SVG не отображается внутри clipPath

У меня есть следующий Codepen , где я пытаюсь анимировать строку круга вокруг изображения

152