如何解决@Qualifier注解引发的Unsatisfied Dependency Exception异常?
问题原因&解决方法
你的代码存在3处核心配置错误,逐一调整即可修复:
包声明缺失
你编写的Pump接口、ServiceB类、SpringDemo3启动类均未显式声明package springdemo3;。Java中未声明包的类默认归属无名包,而你的AppConfig配置的组件扫描路径仅为springdemo3包,无名包内的类不会被Spring扫描加载,因此无法识别到Pump类型的Bean。
修复方案:给上述3个类都补全package springdemo3;声明。@Qualifier Bean名称拼写错误
Spring默认给@Component标注的类生成Bean名的规则是「类名首字母小写,其余字符保持原大小写」,ElectricPump类对应的默认Bean名为electricPump,你代码中写的@Qualifier("electricpump")将P也写为小写,和实际Bean名不匹配,因此找不到对应注入对象。
修复方案:两种二选一即可
- 将
@Qualifier("electricpump")修改为@Qualifier("electricPump") - 给
ElectricPump类的@Component注解指定自定义名称:@Component("electricpump")
- @Primary注解放置位置错误
@Primary是用来指定同类型Bean优先注入的注解,仅标注在类上或者@Bean定义方法上才会生效,你当前把它放在features()重写方法上完全无效,若后续需要优先级逻辑需要调整位置,不需要的话可以直接删除该注解。
修复方案:将@Primary移到ElectricPump类的上方,和@Component平级,或直接删除。
你提到的另一版可正常运行的代码,就是已经修正了上述的包声明、Bean名匹配问题,因此可以正常注入执行。调整完成后重新运行代码即可正常输出结果。
内容的提问来源于stack exchange,提问作者Mgambu
相关产品推荐
相关产品推荐

