尝试自动装配javax.validation.Validator时出现奇怪的弹簧启动行为

时间:2015-01-10 17:30:48

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

这是我的问题:

我开发了一个基于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:没有为依赖项找到[javax.validation.Validator]类型的限定bean

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

&#34; mvcValidator&#34;使用以下类型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 =&#34; mvcValidator&#34;)注释,但我得到了相同的异常。

奇怪的是,我能够自动使用#34; spring&#34;验证器(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?

1 个答案:

答案 0 :(得分:1)

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