Spring中出现NoUniqueBeanDefinitionE
2021-10-14 本文已影响0人
向上生长之路
使用Spring开发框架,有时会遇到同一个接口有多个实现类的情况,这时候在代码中依赖注入该接口的话,Spring就会报错:org.springframework.beans.factory.NoUniqueBeanDefinitionException
- Spring 版本 5.3.6
错误重现
1.创建接口类,暴露name方法用来区分具体的实现类

2.创建接口对应的两个实现类


3.使用@Resource注解注入接口

按照以上操作,启动工程就会发现控制台报错了

解决方案
-
可以通过设置@Resource注解name参数的值,指定注入的实例名,来明确Spring该注入哪个类
默认情况下,这里name的值即为Spring的IOC容器中Bean的驼峰标识名称 -
还可以通过@Primary注解,标记在具体的实现类中,表明当同一个接口存在多个实现类时,优先使用该注解标记的类
编写控制器方法来验证注入的类

启动工程访问控制器,可以看到对应的name值,符合我们的预期~
