我要问的问题可能非常简单(甚至愚蠢)。
我在春季休眠的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的参考实现!