Как связаны валидатор javax и валидатор спящего режима (если они есть)? и в чем разница?

Вопрос, который я задаю, может быть очень простым (даже глупым).

Я использовал проверку в приложении spring-hibernate MVC. Я использую ограничения, такие как @NotNull, @Pattern, которые исходят из пакетов javax.validation. Когда я использую ограничения, такие как @Email, они импортируются из org.hibernate.validator.constraints. В классе валидатора я использую ValidatorFactory и другие классы или интерфейсы (такие как Validation, Validator), все из которых взяты из javax.validation. Я действительно запутался с этим.

Затем я начал углубляться в то, что именно представляют собой пакеты валидатора javax и гибернационного валидатора, и, по-видимому, они являются реализациями JSR303.

Для проверки я использую

ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();

Чтобы еще больше запутать меня, я прочитал еще один способ создания экземпляра ValidatorFactory, который выглядит следующим образом:

ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory();

и работает нормально!

Пожалуйста, помогите мне лучше понять оба из них.

Спасибо за помощь.


person nikhil    schedule 22.09.2017    source источник
comment
Спасибо. Так ты имеешь в виду, что они одинаковые? если да, то почему так много реализаций одного и того же? Вроде, должна же быть какая-то разница, да?   -  person nikhil    schedule 22.09.2017
comment
Нет, я не говорю, что они одинаковы. Я говорю, что один определяет стандарт и не имеет имплементации, а другой обеспечивает реализацию этого стандарта. Существует не так много реализаций проверки bean-компонентов. Но их может быть несколько, каждый из которых более или менее эффективен и предоставляет более или менее дополнительные функции (например, валидатор электронной почты) сверх того, что требуется по стандарту.   -  person JB Nizet    schedule 22.09.2017
comment
Итак, в импорте, когда я вижу import javax.validation.constraints, вы имеете в виду, что он реализован внутри Hibernate, но для стандарта используется имя javax.validation?   -  person nikhil    schedule 22.09.2017
comment
Судя по всему, javax.validation предоставляется Oracle, а валидатор hibernate — это просто еще одна реализация JSR 303.   -  person nikhil    schedule 22.09.2017


Ответы (1)


Как и многие вещи в Java (безопасность, JDBC, JPA и т. д. и т. д.), существует стандарт вызова bean validation, который определяет интерфейсы и стандартные классы (т. е. javax.validation классы) и вы можете выбирать между несколькими реализациями этих классов и интерфейсов (одной из них является валидатор гибернации).

Целевая страница валидатора hibernate говорит:

Hibernate Validator 5.x — это эталонная реализация Bean Validation 1.1!

person JB Nizet    schedule 22.09.2017
comment
Спасибо. Так ты имеешь в виду, что они одинаковые? если да, то почему так много реализаций одного и того же? Вроде, должна же быть какая-то разница, да? - person nikhil; 22.09.2017