记一次匪夷所思的Spring boot项目启动报错 required a single bean, but 2 were found

从这个错误上看controller 请求的service有两个实现类,然而,匪夷所思的是提示的2个类一个是接口类,另一个是实现类。这是在其他同样结构的模块从来没有遇到的过的。

一开始我以为是模块依赖了不同的版本的jar导致了冲突,后来经过替换好的模块的pom文件。再到不断删减代码直至只剩下这2个类问题仍然没有解决我才回归的到这个错误提示上面,为什么别的模块都好用只有这个模块有问题呢:于是我考虑到spring组件的加载机制,代码中跟spring组件加载有关的配置只有这两个@ComponentScan和@MapperScan,通过对比好的模块的配置终于发现了不同,也确实找到了问题的症结,启动了程序:

错误的配置:

正确的配置:

正确的配置和错误的配置的差异是:错误的mapperscan扫描了和spring官方组件扫描工具一样的包,而正确mapperscan扫描的只是mapper包下的组件。

对于造成问题的原因有一些猜测,可能是mapperscan和compentscan都加载了一份组件,所以导致出现了2份组件,所以在注入到controller中spring框架无法得知注入哪一个。 但令人费劲的是为什么报出的错误提示一个是接口类一个是实现类,关于此暂无心力去看mybatis框架的代码,所以我就在这刨个砖引个玉,感兴趣的同学欢迎来释疑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值