Прежде всего, вы должны понимать, что вы говорите о двух разных вещах.
TL; DR: время компиляции против времени выполнения - вам нужно время выполнения
Процессор аннотаций - это абстрактный термин, обозначающий процесс, который выполняется во время компиляции и который может сканировать исходные файлы,с расширением .java
.
Реализация процессора обработки аннотаций *1015* может выдавать предупреждения или даже ошибки для остановки задачи компиляции на основе произвольных проверок.
Пример: «Я заметил, что кто-то передал значение null
моему методу, это ошибка! Остановите все!»
Отправной точкой для реализации процессора аннотаций является AbstractProcessor
базовый класс или интерфейс Processor
( документация ).
В отличие от реализации ConstraintValidator
вам также понадобится явно зарегистрировать его через файл метаданных процессора , который должен находиться под стандартным директоромy внутри произведенного JAR
артефакта.
META-INF/services/javax.annotation.processing.Processor
То, что необходимо для создания процессора аннотаций , уже включено в стандартный JDK.Вам не нужны внешние зависимости.
С другой стороны, ConstraintValidator
идентифицирует интерфейс, который поставляется с модулем Validation API , в пакете javax.validation
,Существуют различные реализации этого API, но наиболее часто используемым является Hibernate Validator
( документация ).
Проверка, которую обеспечивает этот интерфейс, проверяется во время выполнения.
В отличие от аннотацииВ процессоре реализация Validation API должна быть предоставлена вручную, например,
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.15.Final</version>
</dependency>
Вы написали
при применении к методу проверки, а проверяет входные параметры (Примитив и не примитив) против различных проверок
Кажется, вам нужно написать проверки во время выполнения, что означает, что Validation API дорога, чтобы взять.