运行时配置Hibernate验证注释

时间:2013-03-27 19:05:40

标签: bean-validation

我有一些业务验证逻辑,形式为“X is valid IFF Service Y return Z”,其中X和Z在编译时是已知的,Y的位置是从Spring配置文件加载的。

我想使用基于JSR-303注释的验证和Spring配置,所以我可以编写如下代码:

自定义类级别约束注释:

@MyValidation
public class X { .... }

@MyValidation 的ConstraintValidator:

public class MyValidationValidator implements ConstraintValidator<MyValidation, X> {
   private MyService service;
   public MyService getService() { return service; }
   public void setService(MyService serv) { this.service = serv; }
   //Validation Logic...
}

Spring config:

<bean id="ServiceY" class="...">
   ...
</bean>
<bean id="mvv" class="MyValidationValidator">
   <property name="service" value="ServiceY" />
</bean>

但是我尝试以这种方式组合它们的尝试都失败了,因为验证器的属性没有设置。

现在,我正在使用Spring AOP拦截器作为解决方法,但这在我看来并不理想。

这里的其他问题之一让我想到使用属性文件/属性,但这不是要求我重复服务的配置吗?

另一个提到以编程方式定义约束映射,但如果我这样做,我可能会更好地解决我的问题。

有关如何进行动态配置的任何线索?

1 个答案:

答案 0 :(得分:0)

您应该使用Spring的LocalValidatorFactoryBean来设置Bean Validation验证器:

<bean id="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

以这种方式设置的验证器将在内部使用ConstraintValidatorFactory实现,该实现对创建的验证器实例执行依赖注入,只需使用service或{{标记验证器中的@Inject字段1}}。请注意,不需要将约束验证器本身设置为Spring bean。

您可以在Spring reference guide中找到更多详细信息。