美文网首页java工作生活
required a single bean, but 2 we

required a single bean, but 2 we

作者: Zach_6910 | 来源:发表于2019-07-01 18:45 被阅读0次

    测试中发现代码中一个接口的多个实现,注解有误,造成错误

    原始代码如下

    接口:

           public interfaceIPrcCataDataSource {}

    接口实现类1:

    @Component

    public class HotPgPrcDataSource implements IPrcCataDataSource{}

    接口实现类2:

    @Component

    public class PgCalPrcDataSource implements IPrcCataDataSource{}

     调用接口实现类1:

           public  classLcHotPgPrcQryBuild {

                    @Autowired

                     protected IPrcCataDataSource prcCataDataSource;

    }

                      报错信息:

    Description:

    Field prcCataDataSource incom.sitech.pgcent.local.LcHotPgPrcQryBuild required a single bean, but 2 werefound:

             -

    Action:

    Consider marking one of thebeans as @Primary, updating the consumer to accept multiple beans, or using@Qualifier to identify the bean that should be consumed

    报错原因:

    @Autowired 注解的注入规则:

    经过一些代码的的测试,Autowired默认先按Type,如果同一个Type找到多个bean,则,又按照Name方式比对,如果还有多个,则报出异常。

    解决方法:

    方式1:

    在Autowired 下面加入注解@Qualifier

    , @Qualifier 是按照Name方式比对, @Qualifier()中的值是需要注入的类的名称,默认为注入类名第一位小心的形式,或者也可以在实现类中加入@Service(定义类注入名称) 注解,

    @Autowired

    @Qualifier

    ("hotPgPrcDataSource")

    protected IPrcCataDataSource prcCataDataSource;

    方式2:直接加入@Resource注解,name 值是需要注入的类的名称,默认为注入类名第一位小心的形式

    @Resource(name = "hotPgPrcDataSource")

    protected IPrcCataDataSource prcCataDataSource;

    相关文章

      网友评论

        本文标题:required a single bean, but 2 we

        本文链接:https://www.haomeiwen.com/subject/utmncctx.html