我在Spring项目中有这样的结构:
class A {
public void first(){
}
}
class B extends A {
public void first(){
}
}
我想根据条件调用类A或类B的第一个方法,但我得到了这个异常“Caused by:org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有类型为“com.code.A”的合格Bean可用:预期有一个匹配的bean,但找到了% 2:B,A“在Spring。
我试着添加@Qualifier和其他东西,但没有任何工作,有人可以建议任何改变吗?
2条答案
按热度按时间oxcyiej71#
如果使用Annotation将bean放入spring上下文中,可以尝试用不同的名称重命名这些bean,例如@Component(value=“classA”),这样spring将识别这两个类,它们是公共类中的子类;
一般来说,我们经常定义一个抽象的接口,用于其他目的而不是类的子类化。如果你像上面这样重构你的代码,你将减少发生错误的风险,比如spring上下文中的bean不是唯一的。
zvms9eto2#
您的用例和代码示例没有充分解释您试图实现的目标。你能详细说明一下吗?
您的
first
方法不能是bean,因为它们返回void。如果要存储示例,则:这段代码将告诉Spring创建并存储每个A & B的单例示例(在名称A & B下)到Spring上下文中。然后Spring可以在需要的地方注入这些示例:
如果你详细说明你想达到什么目标,你就更容易给予一个更好的答案。