为什么 class Validator 的 Autowire 不工作但为 GeneralValidator 工作?

Why Autowire of class Validator not working but working for GeneralValidator?

我在 java class 中遇到了一个奇怪的行为,我想了解造成这种行为的原因,因为在线调查没有得到与我的情况类似的任何结果,我不得不问。

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

@Component
public class Validator {
...
}

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

@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 注释中声明验证器 class 的名称,当它是相同的名称时?我注意到,如果我将我的 class 名称更改为其他任何名称,例如:GeneralValidator 它可以正常工作,而无需在 @Component.

中说明名称

这是因为与 org.springframework.validation.Validator 冲突(已记录 here), please note the documentation of the optional argument for the @Component (here

The value may indicate a suggestion for a logical component name, to be turned into a Spring bean in case of an autodetected component.