我有一个包含内部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/,关于相同的。类似的解释可以在这里找到:Hibernate验证器的交叉字段验证(JSR 303)。
两者都建议使用相同的方法来定义跨域验证的类级别约束。他们的方法是使用BeanUtils.getProperty()方法,该方法反过来在运行时执行bean验证时使用Java Reflections。
我想知道的是,它是好的定义JSR 303跨域包含使用反射评估在运行时(性能下降)或去其他验证策略,如Spring验证或服务层验证自定义方法?
如果您的需求只是实现一些跨字段验证规则,我建议实现专用的类级约束,通过简单地调用它们的getter来访问相关属性。这使得约束类型为save,并避免了反射。
如果您有许多跨域验证,这使得为所有这些验证创建专用约束成为一项繁琐的任务,那么像@FieldMatch
这样的通用方法可能会节省一些工作。我认为反射的开销在大多数情况下可以忽略不计。如果您看到性能下降,您仍然可以为最关键的情况实现特定的类级别约束。