首页 文章

JSR 303跨字段验证定义自定义约束:性能问题

提问于
浏览
0

我有一个包含内部bean的复合bean,其中一些内部bean也有内部bean . 这个复合bean有200个属性(内部bean的bean属性的属性) . 我使用 JSR 303 来验证用户输入 . 我的要求建议进行跨域bean验证 .

我已经通过了很少的博客和建议,如http://dwuysan.wordpress.com/2012/03/20/cross-field-validation-using-bean-validation-jsr-303/,关于相同的 . 类似的解释可以在这里找到:Cross field validation with Hibernate Validator (JSR 303) .

两者都提出了相同的方法来定义跨字段验证的类级别约束 . 他们的方法是使用 BeanUtils.getProperty() 方法,该方法在执行bean验证时在运行时使用 Java Reflections .

我想知道使用在运行时评估的反射(性能下降)来定义JSR 303 corss-field contrains是好还是通过自定义方法进行Spring Validation或Service层验证等其他验证策略?

1 回答

  • 1

    如果您的要求只是实现一些跨字段验证规则,我建议实现专用的类级别约束,通过简单地调用它们的getter来访问相关的属性 . 这使约束类型保存并避免反射 .

    如果你有很多跨领域验证,这使得为所有这些创建专用约束是一项繁琐的任务,那么像 @FieldMatch 这样的通用方法可能会节省一些工作 . 我认为在大多数情况下,反射的开销应该是可以忽略的 . 如果您看到性能降级,您仍然可以为最关键的情况实现特定的类级别约束 .

相关问题