【问题标题】:Strange spring-boot behaviour when trying to autowire javax.validation.Validator尝试自动装配 javax.validation.Validator 时出现奇怪的 spring-boot 行为
【发布时间】:2015-03-08 20:47:45
【问题描述】:

这是我的问题:

我开发了一个基于spring-boot的Web应用程序,除了这个接口“javax.validation.Validator”之外,spring的自动装配注释在每一层都有效。

当我尝试像这样在我的验证器中自动装配“javax.validation.Validator”时:

@Component
public class BrandValidator{

@Autowired
private javax.validation.Validator validator;

我遇到了这个异常:org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.validation.Validator] found for dependency

首先我认为在 spring 上下文中没有可用于此类的 bean,但实际上当我列出运行时可用的 bean 时(在我的验证器上注释 Autowired 注释之后)我看到这个 bean 可用:

“mvcValidator”具有以下类型OptionalValidatorFactoryBean(这个类扩展LocalValidatorFactoryBean和LocalValidatorFactoryBean实现javax.validation.Validator和org.springframework.validation.Validator你可以看这里http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

我尝试添加 @Qualifier(value ="mvcValidator") 注释,但遇到了同样的异常。

奇怪的是,我能够很好地自动装配“spring”验证器(org.springframework.validation.Validator)类:

@Autowired
private org.springframework.validation.Validator validatorSpring;

我在调试模式下看到上下文中存在的 OptionalValidatorFactoryBean 被注入。

最后,如果我像这样在 javax.validation.Validator 之前自动装配 org.springframework.validation.Validator :

@Component
public class BrandValidator{

//workaround
@Autowired
private org.springframework.validation.Validator validatorSpring;

@Autowired
private javax.validation.Validator validator;

现在 javax.validation.Validator 已正确注入(在调试模式下,我看到两个验证器都是同一个对象 OptionalValidatorFactoryBean)。我真的不明白加载上下文时会发生什么,我真的不喜欢这种解决方法(我的班级不需要 org.springframework.validation.Validator)。

知道如何正确地使用 spring boot 注入 javax.validation.Validator 吗?

【问题讨论】:

标签: java spring-mvc spring-boot validation autowired


【解决方案1】:

尝试在 BrandValidator 类上添加@DependsOn(value="mvcValidator")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2018-01-21
    相关资源
    最近更新 更多