1

我目前正在开发一个 Jersey 项目,并决定使用 Hibernate 验证器进行参数验证。在 Endpoint 类上注入的所有依赖项都已正确初始化。但是对于 ConstraintValidator 类中的那些依赖项,它总是抛出一个 NPE。所以我按照 Spring+hibernate 指南的指南进行了注册

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

并对需要注入的 ConstraintValidator 类中的服务使用@Autowired 注解。

使用它有副作用吗?有没有办法避免 ConstraintValidator 类中的自动装配注释并仍然注入值?我尝试在上下文中手动将 constraintValidator 类注册为 bean,向我需要的服务添加属性引用,但是它会引发空指针异常。

4

1 回答 1

2

“Hibernate Validator - JSR 303 Reference Implementation - Reference Guide” 说了一些关于门户的内容:

警告

任何依赖于特定于实现的 ConstraintValidatorFactory 行为(依赖注入、无参数构造函数等)的约束实现都不被认为是可移植的。

那么,这是一件坏事吗?在我看来不是。当然,您现在与 DI 容器(Spring)耦合,不能轻易重用验证器(例如,当不使用 Spring 时)。另一方面,通过 Spring 工厂构建的验证器,您可以充分利用框架并完成繁重的工作(读取实体的修订数据并比较以前的状态,调用任意服务,增强或本地化验证消息,.. .)。

您必须非常小心的一件事是验证器的语义通常是只读的,并且不应通过调用它来引起副作用。例如,不要因为调用(事务)服务或在验证器中读取数据而导致某些自动刷新而意外地将数据刷新到数据库中。

于 2011-09-30T20:32:09.143 回答