为什么类Validator的Autowire无法工作但是为GeneralValidator工作?

时间:2016-02-08 10:06:15

标签: spring spring-mvc autowired spring-validator

我在我的java课程中遇到了一个奇怪的行为,并想知道这种行为的原因是什么,因为在线调查没有与我的情况类似的结果,我不得不问。

我使用Spring Framework的java程序有一个名为Validator的类,它的定义如下:

@Component
public class Validator {
...
}

现在,在我的代码中的许多其他地方,我使用带有@Autowired注释的类,如:

@Autowired
Validator validator;

当我尝试启动我的服务时,.war失败并显示错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.company.common.validators.Validator]

但是,如果我在@Component注释中添加名称,如下所示:

@Component("Validator")
public class Validator {
...
}

它完美无缺。

为什么我必须在@Component注释中声明验证器类的名称,当它是相同的名称时?我注意到,如果我将我的班级名称更改为其他任何内容,例如:GeneralValidator它可以正常工作,而无需在@Component中说明姓名。

1 个答案:

答案 0 :(得分:0)

这是因为与org.springframework.validation.Validator(记录为here)发生冲突,请注意@Component(here

的可选参数的文档
  

该值可能表示对逻辑组件名称的建议,如果是自动检测组件,则将其转换为Spring bean。