java – Autowired Repository在Custom Constraint Validator
我有一个基于Spring的webapp.我在控制器中使用了几个带注释@Repository,@ Transaction的存储库类.那部分工作正常. 我创建了一个Custom Constraint Validator,它必须访问存储库.现在我无法理解为什么Repository为null.我尝试使用@Component注释来注释验证器.我的基本包包含所有这些类是在xml的一部分.那么我还应该做些什么来确保存储库依赖注入工作.这就是我的Constraint验证器的样子.
更新 包扫描配置:
此类在包model.donortype中. 更新 更令人费解的是,删除所有preinsert侦听器(在这种情况下只有BeanValidationEventListener)修复了自动装配问题.这使事情变得更加复杂. 我甚至没有插入BeanValidationEventListener,如下面的答案所述.这与此处的建议相反:
更新 我正在使用JPA.我有JPA实体的支持表格.在控制器中,我使用InitBinder来实例化自定义验证器binder.setValidator(new EntityBackingFormValidator(binder.getValidator()));. 此自定义验证程序在默认验证程序上调用验证,并使作用域执行一些自定义验证. 我在实体中使用注释来创建约束.除了默认约束之外,我还需要定义约束,以检查多对一映射的另一侧是否存在实体. 现在,此自定义约束验证程序中的自动装入的存储库为null.我正在尝试在我的CustomIntegrator中自定义代码 和xml配置文件在这里 希望实际的代码可以帮助您回答我的问题. 最佳答案
你使用哪个ValidatorFactory.或者换句话说,热门你引导Bean Validation?默认的Bean Validation(和Hibernate Validator作为参考实现)不会将依赖注入ConstraintValidator实例.至少在Bean Validation 1.0中.
要启用依赖项注入,您必须配置自定义ConstraintValidatorFactory. Spring提供SpringConstraintValidatorFactory,这是使用LocalValidatorFactoryBean时的默认值 – 请参阅http://static.springsource.org/spring/docs/3.0.0.RC3/reference/html/ch05s07.html 另外,你使用JPA吗?我假设,在这种情况下自动验证生命周期事件.您可以只使用属性javax.persistence.validation.mode并将其设置为NONE,而不是尝试删除事件侦听器.我想知道是否在基于生命周期的验证中使用了正确的验证器. 这完全取决于您的整体Spring配置和使用情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |