【发布时间】: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 吗?
【问题讨论】:
-
如何通过 XML 或 Java 配置注入 OptionalValidatorFactoryBean?另外,您是否尝试过Spring-Boot How to properly inject javax.validation.Validator 中的解决方案?它对我有用。
标签: java spring-mvc spring-boot validation autowired