0

我在我的 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.

4

1 回答 1

0

这是因为与 org.springframework.validation.Validator 冲突(在此处记录),请注意@Component 的可选参数的文档(此处

该值可能表示对逻辑组件名称的建议,在自动检测到组件的情况下将其转换为 Spring bean。

于 2016-02-08T11:22:53.667 回答