在Pemrograman Java dengan Spring 4 book的第 247 页中,连接了用于数据验证的类:
但是这里有一点有意思,javax验证和hibernate.validator是一对一的,类名是重复的,而且他们的目标是一样的。
但是Java会使用什么包,这样做会不会有什么问题,为什么会这样呢?
据我所知,为避免歧义,这两个类都应该用它们的全名来引用,但我仍然对此持怀疑态度,可能是错的,但这是一本书。
另外,在本手册中可以看到大致相同的图片,这里添加了 maven 依赖项 javax 验证和休眠验证器,虽然导入是从不同的包进行的,但这里的问题是,如果可以一个包,为什么还要使用两个包?
Hibernate实现了Bean Validation API规范。包
javax.validation是由规范定义的,包org.hibernate.validator中包含特定于hibernate的类。Oracle(现为 Eclipse Foundation)发布了 Java EE(现为 Jakarta EE)标准,其中包括一组规范。特别是 Bean Validation API 规范,它定义了 bean 的自动验证。该规范定义了开发人员如何与标准的实现进行交互。实现细节(在这种情况下,验证是如何完成的)超出了规范。
该标准的实现是与数据库交互的特定库。Bean Validation API 规范的参考实现是Hibernate Validator。不同的供应商可能会提供他们自己的实现(例如,Apache BVal)来为开发人员提供额外的功能和/或性能改进。
那。类是
javax.validation标准的,可以在不同的实现中使用。这些类org.hibernate特定于 Hibernate。例如,Hibernate 提供了一个非标准的Range. 理论上,如果开发人员只使用标准类,代码可以无缝地转移到另一个实现中。尽可能使用类是一种很好的做法
javax.*。org.hibernate只有当你想使用 Hibernate 特定的特性时才应该使用类。这种方法提高了代码的可移植性。你是对的,这本书使用星号导入来节省示例中的空间。一个好的方法是,在代码中你需要分别导入每个类,然后就会清楚到底使用了什么以及类在多大程度上依赖于这个或那个包。