当前位置: 首页 > 知识库问答 >
问题:

NoSuchBeanDefinitionException:未定义类型唯一bean。而两个相同类型的豆子

诸经略
2023-03-14

我想通过类型使用自动连接,以便在运行时容器注入适当的对象并调用适当的bean/method。

1.接口

  public interface Calculator {

    public int add(int a,int b);
}

2.头等舱

public class CalculatorImpl implements Calculator {

public int add(int a, int b) {
    // TODO Auto-generated method stub
    int result=a+b;

    return result;
}
public class CalculatorImpl2 implements Calculator{

public int add(int a, int b) {
    // TODO Auto-generated method stub
    int result=a-b;

    return result;
}

4.Rest课

@Component
@Path("/calc")
    public class CalculationService {
    @Autowired
    Calculator calculator;

    @GET
    @Path("/add/{a}/{b}/")
@Qualifier("calculatorImpl")
    @Produces("text/plain")
    public Response serveAdd(@PathParam("a") int a,
            @PathParam("b") int b)
    {

        int result= calculator.add(a, b);

        return Response.status(200).entity(String.valueOf(result)).build();

    }


    @GET
    @Path("/sub/{a}/{b}")
@Qualifier("calculatorImpl2")
    public Response serveSub(@PathParam("a") int a,
            @PathParam("b") int b)
    {
        int result= calculator.add(a, b);

        return Response.status(200).entity(String.valueOf(result)).build();


    }
}

5.application-context.xml

<context:component-scan base-package="com.veke.rest" />

 <bean id="calculatorImpl" 
                  class="com.veke.calcImpl.CalculatorImpl"  autowire="byType"/>


  <bean id="calculatorImpl2" 
                  class="com.veke.calcImpl.CalculatorImpl2"  autowire="byType"/>

                  </beans>

错误:

共有1个答案

姚才捷
2023-03-14

不能只有一个calculator实例变量,并使其同时表现为CalculatorImplCalculatorImpl2。您需要进行以下更改:

calculationservice中:

@Autowired
@Qualifier("Impl1")
Calculator calculator;

@Autowired
@Qualifier("Impl2")
Calculator calculator2;

然后可以在相应的方法中使用这些实例变量。

 类似资料:
  • 我在调用get请求(modes-calcul)时遇到这个错误,我不明白为什么...我的依赖注入是正确的吗? ModeCalculController: 谢谢你的帮助..

  • 2020-09-23T15:28:00.3483912Zjava.lang.IllegalStateExcture:未能加载Application ationContext 2020-09-23T15:28:00.3489821Z引起的原因:org.springframework.beans.factory.不满意依赖异常:创建在文件[/home/run/work/comation-service

  • 这是我的pom 时出现以下错误

  • 我使用一个Android库,它要求我创建两个类,每个类继承自不同的类 (具有公共基类) 现在我有这个代码: 我必须复制这个类来创建一个扩展,即使我的两个类共享完全相同的代码。 我简化了示例的代码,但重复可能很重要 我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。 你能帮我解决这个问题吗? 和都继承自。

  • 问题内容: 我喜欢基于构造函数的注入,因为它允许我进行注入的字段。我还喜欢注释驱动的注入,因为它简化了我的操作。只要没有两个相同类型的参数,就可以用标记构造函数,并且一切正常。例如,我有一个课: 以及具有以下内容的应用程序上下文: 应该有一种在类的构造函数上指定bean ID的方法,但是我在文档中找不到它。是否有可能,或者我是否梦想着不存在的解决方案? 问题答案: 是按类型(在这种情况下);用于按

  • 问题内容: 我有以下定义。 在我的bean定义中,我有两个相同类型的bean 如果有所不同,则从另一个xml文件导入第二个bean。它们也设置了不同的属性。为什么spring不会抛出错误,因为已经定义了2个相同类型的bean。它是否使用变量名,因为它们与bean id匹配。dao是不同的,如果我对两个不同的bean使用@Qualifiers,则功能可以按预期工作。 这是一个更简洁的版本。我没有考虑