Ответ
RetentionPolicy — это перечисление (enum) в Java, которое определяет, как долго аннотация будет сохраняться в жизненном цикле кода. Задается с помощью мета-аннотации @Retention.
Три политики сохранения:
-
RetentionPolicy.SOURCE— аннотация сохраняется только в исходном коде и отбрасывается компилятором. Не попадает в.classфайлы.- Пример:
@Override,@SuppressWarnings. Используются только компилятором.
- Пример:
-
RetentionPolicy.CLASS(значение по умолчанию) — аннотация записывается в.classфайл, но недоступна во время выполнения через Reflection.- Использование: для инструментов анализа байт-кода (например, инструментирование, генерация кода).
-
RetentionPolicy.RUNTIME— аннотация записывается в.classфайл и доступна во время выполнения через Reflection API (getAnnotation()).- Пример:
@Testв JUnit, аннотации Spring (@Component,@Autowired).
- Пример:
Пример объявления аннотации:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
// Аннотация будет доступна во время выполнения
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "default";
int priority() default 0;
}
Почему это важно? Выбор политики влияет на то, сможете ли вы обработать аннотацию во время выполнения (например, для конфигурации фреймворка или запуска тестов).