Можно ли использовать внедрение зависимостей в ConstraintValidator
, определенном как вложенное в @interface
?
Я создал пользовательскую аннотацию, которая должна проверять некоторые данные.
CodebookValidator
- это обычный класс: он не аннотируется @Service
, @Component
... Однако DI не работает, даже когда я аннотирую его @Service
...
Есть идеи, как использовать @Autowired
внутри ConstraintValidator
? Вот фрагмент кода:
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CodebookValue.CodebookValidator.class)
public @interface CodebookValue {
Codebook value();
String message() default "Not valid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
class CodebookValidator implements ConstraintValidator<CodebookValue, String> {
@Autowired
private CodebookService codebookService; // this won't work it's null at runtime
private Codebook codebook;
@Override
public void initialize(CodebookValue constraintAnnotation) {
codebook = constraintAnnotation.value();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext ctx) {
String translate = codebookService.translate(value, codebook, codebook.getSourceSystem());
return StringUtils.isEmpty(translate);
}
}
}