Spring依赖注入报错:找不到匹配的Duck5类型Bean(存在两个实例)
Spring Bean依赖注入报错解决方案
问题原因
你遇到的No qualifying bean of type 'koschei.models.Duck5' available: expected single matching bean but found 2: duck5,getDuck错误,是因为Spring容器里存在两个Duck5类型的Bean:
- 一个是Spring自动扫描生成的(推测你的
Duck5类标注了@Component或类似注解,默认Bean名称为duck5) - 另一个是你在
AppConfig中通过@Bean方法getDuck定义的Bean,名称为getDuck
当Spring尝试注入Duck5类型Bean时,无法确定选哪一个,因此抛出该错误。
解决方法
方法1:移除重复的Bean定义
如果Duck5类已经通过@Component/@Service等注解被Spring自动扫描管理,直接删掉AppConfig中的@Bean方法getDuck即可。Spring会自动创建Duck5的Bean,并完成Egg6的依赖注入(前提是Egg6也是Spring容器中的Bean)。
方法2:用@Qualifier指定注入的Bean名称
在需要注入Duck5的地方,通过@Qualifier明确指定要使用的Bean名称:
@Autowired @Qualifier("getDuck") // 也可以填"duck5",根据需求选择对应的Bean private Duck5 duck5;
方法3:设置@Primary指定优先Bean
给其中一个Bean标记@Primary,让Spring遇到多个同类型Bean时优先选择它:
- 若保留
AppConfig中的@Bean方法,修改代码:
@Bean @Primary public static Duck5 getDuck(Egg6 egg) {return new Duck5(egg);}
- 若保留自动扫描的
Duck5Bean,在类上添加@Primary:
@Component @Primary public class Duck5 { // ... }
内容的提问来源于stack exchange,提问作者Kristina
相关产品推荐
相关产品推荐

