java–Autowired Repository在Custom Constraint Validator中为Null

java–Autowired Repository在Custom Constraint Validator中为Null,第1张

概述我有一个基于Spring的webapp.我在控制器中使用了几个带注释@Repository,@ Transaction的存储库类.那部分工作正常.我创建了一个Custom Constraint Validator,它必须访问存储库.现在我无法理解为什么Repository为null.我尝试使用@Component注释来注释验证器.我的基本包包含所有这些类是在

我有一个基于Spring的webapp.我在控制器中使用了几个带注释@Repository,@ Transaction的存储库类.那部分工作正常.

我创建了一个Custom Constraint ValIDator,它必须访问存储库.现在我无法理解为什么Repository为null.我尝试使用@Component注释来注释验证器.我的基本包包含所有这些类是在xml的一部分.那么我还应该做些什么来确保存储库依赖注入工作.这就是我的Constraint验证器的样子.

public class DonorTypeExistsConstraintValIDator implements    ConstraintValIDator

更新

包扫描配置:

此类在包model.donortype中.
存储库位于包存储库中.

更新

更令人费解的是,删除所有preinsert侦听器(在这种情况下只有BeanValIDationEventListener)修复了自动装配问题.这使事情变得更加复杂.

我甚至没有插入BeanValIDationEventListener,如下面的答案所述.这与此处的建议相反:
JSR-303 dependency injection and Hibernate

  @OverrIDe  public voID integrate(Configuration configuration,SessionFactoryImplementor implementor,SessionFactoryServiceRegistry registry) {      logger.info("Registering event Listeners");      System.out.println("here");      // you can add duplication strategory for duplicate registrations      final EventListenerRegistry eventRegistry = registry.getService(EventListenerRegistry.class);      // prepend to register before or append to register after      // this example will register a persist event Listener      eventRegistry.prependListeners(EventType.PERSIST,EntitySaveListener.class);      eventRegistry.appendListeners(EventType.MERGE,EntitySaveListener.class);      Iterator

更新

我正在使用JPA.我有JPA实体的支持表格.在控制器中,我使用InitBinder来实例化自定义验证器binder.setValIDator(new EntitybackingFormValIDator(binder.getValIDator()));.
这是以下代码:
https://github.com/C4G/V2V/blob/87dc266043f6d623c101d947a88fa0b0ad536355/src/controller/CollectedSampleController.java

此自定义验证程序在默认验证程序上调用验证,并使作用域执行一些自定义验证.
https://github.com/C4G/V2V/blob/87dc266043f6d623c101d947a88fa0b0ad536355/src/model/collectedsample/CollectedSampleBackingFormValidator.java

我在实体中使用注释来创建约束.除了默认约束之外,我还需要定义约束,以检查多对一映射的另一侧是否存在实体.
这是自定义约束验证器.
https://github.com/C4G/V2V/blob/87dc266043f6d623c101d947a88fa0b0ad536355/src/model/donor/DonorExistsConstraintValidator.java

现在,此自定义约束验证程序中的自动装入的存储库为null.我正在尝试在我的CustomIntegrator中自定义代码
https://github.com/C4G/V2V/blob/87dc266043f6d623c101d947a88fa0b0ad536355/src/interceptor/CustomIntegrator.java

和xml配置文件在这里
https://github.com/C4G/V2V/blob/87dc266043f6d623c101d947a88fa0b0ad536355/war/WEB-INF/v2v-servlet.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配置和使用情况.

总结

以上是内存溢出为你收集整理的java – Autowired Repository在Custom Constraint Validator中为Null全部内容,希望文章能够帮你解决java – Autowired Repository在Custom Constraint Validator中为Null所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1255980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)