原创

若依框架前后端分离版required a single bean, but 2 were found

温馨提示:
本文最后更新于 2022年07月18日,已超过 78 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

问题

在使用若依的前后端分离的框架做项目时,很多人会选择将自己的业务模块独立出来,这样能将自己的业务代码和框架解耦

问题场景:
①使用若依的代码生成工具
②新业务模块独立出来,不放在ruoyi-system下了,并且更换包路径
在按照若依官方的常见问题操作了一番还是会有问题。

file

问题分析

由于好久没有使用若依了并且之前都没有将业务模块独立出来,所以这次找了好久也没有找到问题,一度认为是我的操作有问题。

从报错可以看出来我的问题是bizCatelogService这个bean有两个,而我在BizCatelogController中注入的时候不知道使用哪一个。

既然它不知道使用哪个那我们就给他指定名称进行注入
ps. 若依原来没有写名称那就默认通过类型来进行注入。

解决办法

声明bean的时候,指定名称

@Service("bizCatelogService")

Controller中注入bean的时候通过名称来进行注入

@Autowired
@Qualifier("bizCatelogService")

尝试了一下,结果真的可以了。

总结

最后大胆猜想一下出现这个问题的原因,我们再将业务模块独立出来的时候需要,新增我们包的访问路径

@ComponentScan({"com.ruoyi.*","com.it1997.*"})

我猜想问题就出现在这里,我们在若依的模块里引入了我们的模块,这样就会注入有两个bean了
所以在使用的时候不知道如何选择。

代码生成工具优化

在注入bean的地方增加按名称来进行注入
controller.java.vm

import org.springframework.beans.factory.annotation.Qualifier;
@Qualifier("${className}Service")

serviceImpl.java.vm
在声明bean的地方指定名称

@Service("${className}Service")

file

正文到此结束
本文目录