0

我了解应用程序的多个层都需要验证。但是,如果要施加的验证在所有层上都是相同的(大多数时候都是这种情况),那么使用通用的验证框架是有意义的。这是 Hibernate Validator 的目标之一。

为了确保对象的有效状态,我计划将验证放在实体的设置器中。此外,我在实体上放置了注释约束,以便 Hibernate 可以在持久化之前使用它们来验证实体对象。然后,与其编写我自己的验证(本质上检查与 Hibernate 注释相同的约束),我为什么不应该在 setter 中使用 Validator 实例来验证属性。我可以用validator.validateProperty()它。

但是,我担心的是性能。构建一个 ValidatorFactory 并在每个 setter 中获取一个验证器实例是一件昂贵的事情吗?还是我对性能考虑太多了?如果我不使用 Validator,那么我将选择 Apache Commons 库在 setter 中进行验证。

那么,哪种方式更好呢?

4

1 回答 1

2

您可能会看一下方法级验证,它是自 4.2 以来的 Hibernate Validator 的一部分(并将成为 1.1 版的 Bean Validation API 的一部分),并允许在调用时自动验证参数值。这样你就可以根据你的架构使用 AOP、动态代理等来验证 setter 参数。

关于性能,您通常应该ValidatorFactory为您的应用程序只创建一个并缓存它。从同一工厂检索验证器通常是一项廉价的操作。当然实际成本取决于约束的类型和数量,因此您可以自己运行一些性能分析以查看是否有任何热点。

于 2013-02-04T21:10:49.123 回答