【问题标题】:Run-Time Configuring a Hibernate Validation Annotation运行时配置 Hibernate 验证注释
【发布时间】:2013-03-27 19:05:39
【问题描述】:

我有一些“X 是有效的 IFF 服务 Y 返回 Z”形式的业务验证逻辑,其中 X 和 Z 在编译时是已知的,并且 Y 的位置是从 Spring 配置文件加载的。

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

自定义类级约束注解:

@MyValidation
public class X { .... }

@MyValidation 的约束验证器:

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...
}

弹簧配置:

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

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

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

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

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

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

【问题讨论】:

    标签: bean-validation


    【解决方案1】:

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

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

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

    您可以在春季reference guide找到更多详细信息。

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2019-11-08
      • 2014-10-05
      • 1970-01-01
      • 2012-05-24
      相关资源
      最近更新 更多