2013-03-27 84 views
0

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

我想使用JSR-303基于注解的验证,与Spring配置在一起,所以我可以写类似下面的代码:

自定义类级别约束注释:

@MyValidation 
public class X { .... } 

ConstraintValidator为@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... 
} 

Spring配置:

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

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

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

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

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

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

回答

0

您应该使用Spring的LocalValidatorFactoryBean建立一个Bean验证验证:

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

一个验证设置了这种方式将在内部使用ConstraintValidatorFactory实施,其对创建验证实例依赖注入,只要勾选service请在验证器中输入@Inject@Autowired。请注意,不需要将约束验证器本身设置为Spring bean。

你可以在Spring reference guide找到更多的细节。