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

NoUniqueBean定义异常:不控制Bean创建类

毛胜
2023-03-14

在Spring,在以下场景中是否可以避免出现NonuiqueBeandeFinitionException(名词性和定义异常):

>

  • 我的应用程序引用了第三方库中的bean

     appBean="thirdPartyClass"
    

    bean代码位于我无法编辑的第三方库中

     @Component
     public class ThirdPartyClass {
    
         @Autowired
         private ThirdPartyInterface thirdPartyInterface;
    

    第三方接口由我控制的两个类使用

    此类:

      public class MyClass1 implements ThirdPartyInterface {
    

    而这个类:

       public class MyClass2 implements ThirdPartyInterface {
    

    当前,当我尝试启动应用程序时,出现了NonuiqueBeandeFinitionException,并说出以下内容:

    <代码>组织。springframework。豆。工厂UnsatisfiedDependencyException:创建名为“thirdPartyClass”的bean时出错:通过字段“ThirdPartyInterface”表示的未满足的依赖关系;嵌套异常为org。springframework。豆。工厂NonuiqueBeandDefinitionException:没有“ThirdPartyInterface”类型的合格bean可用:需要单个匹配bean,但找到了2个:MyClass1,MyClass2

  • 共有2个答案

    方祺
    2023-03-14

    错误清楚地说明了问题所在-

    当您有2个类实现相同的接口并且您尝试通过该接口使用@Autow的时,Spring不知道选择哪个实现(MyClass1MyClass2)。

    你需要具体点。使用限定符指定要选择的实现。

    我很快在这里找到了一个例子-Spring@Autowired和@Qualifier

    诸葛雅达
    2023-03-14

    考虑到您无法更改第三方类。

    将已实现的类之一设为@主类,将其视为第三方类类中的自动加载的主bean。

    @Primary
    @Component
    public class MyClass1 implements ThirdPartyInterface {
    }
    

    并将限定符添加到另一个实现的类中。并在其他类中使用相同的限定符来自动连接并无缝使用它。

    java prettyprint-override">@Component
    @Qualifier("queue2")
    public class MyClass2 implements ThirdPartyInterface {
    }
    
    @Component
    public class MyOtherClass {
         @Autowired
         @Qualifier("queue2")
         private ThirdPartyInterface thirdPartyInterface;
    }
    
     类似资料:
    • 问题 在你构建的应用程序中,你想将底层异常包装成自定义的异常。 解决方案 创建新的异常很简单——定义新的类,让它继承自 Exception (或者是任何一个已存在的异常类型)。 例如,如果你编写网络相关的程序,你可能会定义一些类似如下的异常: class NetworkError(Exception): pass class HostnameError(NetworkError):

    • 问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU

    • 在一次采访中,我最近被问到以下问题: 有没有其他方法可以创建自定义的,而不使用: 扩展异常类或的子类,用于检查异常 为未检查的异常扩展或的子类。 可能的答案是什么?

    • 我创建了一个小的测试项目来测试我的实现,下面是我的异常类头文件。 异常类的源文件为 在我的主应用程序中,我调用了一个函数,该函数抛出我的异常,并在try/catch中捕获它,如下所示: 现在要跑了。哦,天哪,我需要抛出一个异常 捕获的异常:这是我的异常错误。:( 相反,我得到的是 从我在各种帖子上看到的情况来看,我所做的是正确的,所以我错过了什么。

    • 当面对选择抛出异常的类型时,您可以使用由别人编写的异常 - Java平台提供了许多可以使用的异常类 - 或者您可以编写自己的异常类。 如果您对任何以下问题回答“是”,您应该编写自己的异常类;否则,你可以使用别人的。 你需要一个Java平台中没有表示的异常类型吗? 如果用户能够区分你的异常与由其他供应商编写的类抛出的异常吗? 你的代码是否抛出不止一个相关的异常? 如果您使用他人的例外,用户是否可以访

    • 问题内容: 如何在Java中创建自定义异常? 问题答案: 要定义受检查的异常,请创建的子类(或子类的层次结构)。例如: 可能引发或传播此异常的方法必须声明它: …,并且调用此方法的代码必须处理或传播此异常(或同时处理): 你会在上面的示例中注意到该错误IOException已被捕获并重新抛出为。这是用于封装异常的常用技术(通常在实现API时)。 有时在某些情况下,你不想强制每个方法在其throws