0

我有一些“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 拦截器作为解决方法,但这在我看来并不理想。

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

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

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

4

1 回答 1

0

您应该使用 SpringLocalValidatorFactoryBean设置一个 Bean Validation 验证器:

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

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

您可以在 Spring参考指南中找到更多详细信息。

于 2013-03-27T23:14:07.520 回答