java–Autowired在Custom Constraint验证器中给出Null值

java–Autowired在Custom Constraint验证器中给出Null值,第1张

概述我对Spring来说是全新的,我已经在SO上找到了一些问题的答案.以下是链接:Spring 3.1 Autowiring does not work inside custom constraint validatorAutowiring a service into a validatorAutowired Repository is Null in Cu

我对Spring来说是全新的,我已经在SO上找到了一些问题的答案.以下是链接:

Spring 3.1 Autowiring does not work inside custom constraint validator

Autowiring a service into a validator

Autowired Repository is Null in Custom Constraint Validator

我有一个Spring项目,我想在其中使用Hibernate ValIDator进行对象验证.基于我在网上阅读的内容和一些论坛,我试图注入验证器如下:

@Bean  public ValIDator valIDator() {    return new LocalValIDatorfactorybean().getValIDator();  }

但无论我在哪里使用

@autowiredValIDator valIDator;

它采用了Spring的验证器实现而不是Hibernate的验证器.我无法弄清楚如何准确地注入Hibernate验证器并简单地将其自动装配到其他类中,所以我使用了一个便宜的技巧,现在我的Java Config看起来像这样

@Bean      public ValIDator valIDator() {        // ValIDatorImpl is Hibernate's implementation of the ValIDator        return new ValIDatorImpl();      }

(我真的很感激,如果有人能指出我如何避免以这种Hacky方式获得Hibernate ValIDator的正确方向)

但是让我们来看看主要问题:

这是自定义验证定义

@Target( { METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,ParaMETER } )@Retention(RUNTIME)@Constraint(valIDatedBy = EmployeeValIDator.class)@documentedpublic @interface EmployeeValIDation {String message() default "{constraints.employeeConstraints}";public abstract Class

我的自定义验证器

public class EmployeeValIDator implements ConstraintValIDator

在上面的Custom Constraint ValIDator中,我得到employeeService null.我知道Spring启动时没有实例化ConstraintValIDator的任何实现,但我认为添加ValIDatorImpl()实际上会解决这个问题.但事实并非如此.

现在我陷入了一个非常Hacky的解决方法,我不想继续这样的代码.有人可以帮助我解决我的情况.

附:这些是我在Java Config文件中的导入:

import org.hibernate.valIDator.HibernateValIDator; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.core.env.Environment; import org.springframework.valIDation.ValIDator; import org.springframework.valIDation.beanvalIDation.LocalValIDatorfactorybean; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.VIEwResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.i18n.cookieLocaleResolver; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.vIEw.InternalResourceVIEwResolver; 
最佳答案我希望解决方案可以帮助某人:

@Beanpublic ValIDator valIDator () {    ValIDatorFactory valIDatorFactory = ValIDation.byProvIDer( HibernateValIDator.class )        .configure().constraintValIDatorFactory(new SpringConstraintValIDatorFactory(autowireCapablebeanfactory))        .buildValIDatorFactory();    ValIDator valIDator = valIDatorFactory.getValIDator();    return valIDator;}

使用SpringConstraintValIDatorFactory初始化验证器以便注入工作并将验证器实现提供为Hibernate.class以下列方式工作:

>您的项目将由您选择的图书馆验证
>您的自定义验证器将能够使用Spring的功能,同时通过Hibernate执行验证.

这个怎么运作:
Hibernate的ConstraintValIDtorFactory不会初始化任何ConstraintValIDator,除非它们被调用但SpringConstraintValIDatorFactory通过向它提供autowireCapablebeanfactory来实现.

编辑
正如@shabyasaschi的一条评论中所提到的,要注入autowireCapablebeanfactory,您可以将方法签名更改为:

ValIDator valIDator(final autowireCapablebeanfactory autowireCapablebeanfactory) {

或者在配置文件中为它添加getter和setter,如下所示:

public autowireCapablebeanfactory getautowireCapablebeanfactory() {        return autowireCapablebeanfactory;}public voID setautowireCapablebeanfactory(autowireCapablebeanfactory autowireCapablebeanfactory) {        this.autowireCapablebeanfactory = autowireCapablebeanfactory;}
总结

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

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

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

原文地址: https://outofmemory.cn/langs/1260805.html

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

发表评论

登录后才能评论

评论列表(0条)