спящий валидатор без использования autowire

В настоящее время я работаю над проектом в Джерси и решил использовать валидатор Hibernate для проверки параметров. Все зависимости, внедренные в классы Endpoint, правильно инициализированы. Однако для этих зависимостей в классах ConstraintValidator всегда выдается NPE. Итак, я следовал руководству по Spring+гибернации и зарегистрировался

bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"

и использовал аннотацию @Autowired для служб в классе ConstraintValidator, которые необходимо внедрить.

есть ли побочные эффекты от его использования? Есть ли способ избежать аннотации автопроводки в классе ConstraintValidator и по-прежнему вводить значения? Я попытался вручную зарегистрировать класс limitedValidator в контексте как bean-компонент, добавив ссылку на свойство нужной мне службы, однако он выдает исключение нулевого указателя.


person geneqew    schedule 15.09.2011    source источник


Ответы (1)


"Hibernate Validator - Справочная реализация JSR 303 - Справочное руководство" что-то говорит о порталах:

Предупреждение

Любая реализация ограничения, основанная на поведении ConstraintValidatorFactory, специфичном для реализации (внедрение зависимостей, отсутствие конструктора без аргументов и т. д.), не считается переносимой.

Значит, это плохо? По моему это не так. Конечно, теперь вы подключены к контейнеру DI (Spring) и не можете легко повторно использовать валидаторы (например, когда не используете Spring). С другой стороны, с вашими валидаторами, созданными фабрикой Spring, вы можете в полной мере воспользоваться преимуществами платформы и выполнять очень тяжелую работу (считывать данные о ревизиях для сущностей и сравнивать предыдущие состояния, вызывать произвольные службы, улучшать или локализовать сообщения проверки, .. .).

Одна вещь, с которой вы должны быть очень осторожны, это то, что семантика валидатора обычно только для чтения и не должна вызывать побочных эффектов при ее вызове. Например, не сбрасывайте данные в базу данных случайно из-за какой-либо автоматической очистки, вызывая (транзакционную) службу или читая данные внутри вашего валидатора.

person jeha    schedule 30.09.2011
comment
с валидатором hibernate 6 вы можете реализовать свой собственный ConstraintValidatorFactory для работы с непустыми конструкторами, но все равно спасибо, что указали мне правильное направление :) - person ThanksForAllTheFish; 18.01.2019