我要问的问题可能非常简单(甚至愚蠢)。

我在春季休眠的MVC应用中使用验证。我正在使用来自javax.validation包的@ NotNull,@ Pattern等约束。当我使用@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();


而且效果很好!

请帮助我更好地理解这两个方面。

感谢帮助。

最佳答案

作为Java中的许多内容(安全性,JDBC,JPA等),有一个标准的调用bean验证,它定义了接口和标准类(即javax.validation类),并且您可以在几种之间进行选择这些类和接口的实现(休眠验证器就是其中之一)。

The landing page of hibernate validator告诉它:


  Hibernate Validator 5.x是Bean Validation 1.1的参考实现!

07-27 13:30