SpringBoot包扫描问题记录(@SpringBootApplication,@ComponentScan,@MapperScan,@Mapper)

SpringBoot包扫描问题记录(@SpringBootApplication,@ComponentScan,@MapperScan,@Mapper)

事情起因:

在这里插入图片描述

上面是代码报错,大概意思是在MaterDetailImpl里面找不到bean,当然我解读完报错后就去这个类查看,事实上当时我想注入的是mapper类,结果不小心打错成了注入实体类

在这里插入图片描述

解决过程:

一开始我以为是Maper包没有被扫描到,我检查完我的所有Mapper类发现都是都带有@Mapper注解的,这时候我就用@MapperScan主动去扫描Mapper类,理所当然报错没有解决,因为主要问题是注入的是实体类,而不是mapper

这时候我突发奇想使用了@ComponentScan注解去扫描

@ComponentScan(value = "com.jmu.storage.mapper")

这个注解加上后竟然奇迹般没有报错了。然而@MapperScan却不能扫描到,当时我确实懵逼了,不知道为什么。当然最后我发现了我的自动注入把Mapper类写错成了实体类,改正之后不用加上面注解就可以正常运行了。

问题虽然解决了,但是为什么写错自动注入后,添加了@ComponentScan(value = “com.jmu.storage.mapper”)就不在报错了,难道扫描mapper,会自动将实体类注册成bean ???,答案显然不是。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5shnAe69-1686410683191)(C:\Users\fems\AppData\Roaming\Typora\typora-user-images\image-20230610231127617.png)]

为此我去查阅了一部分关于springboot源码相关信息发现@SpringBootApplication注解包含了一个@ComponentScan注解,问题就在这里,我们正常使用SpringBoot时候,它可以自动帮我们扫描同目录的的组件,就是依靠@SpringBootApplication注解里面的@ComponentScan注解完成的。然而我们在外部主动加入注解@ComponentScan,这个注解是会覆盖掉@SpringBootApplication注解里面的默认扫描路径的。所以这个项目启动时候只会扫描mapper包,而不会去扫描发生报错的service包

下面做个简单测试:

只扫描mapper包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cz2QLkVY-1686410683191)(C:\Users\fems\AppData\Roaming\Typora\typora-user-images\image-20230610231745861.png)]

项目正常启动:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luLpDp7M-1686410683191)(C:\Users\fems\AppData\Roaming\Typora\typora-user-images\image-20230610231845716.png)]

当你同时对service包扫描时候:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RjEssIh5-1686410683192)(C:\Users\fems\AppData\Roaming\Typora\typora-user-images\image-20230610231854346.png)]

代码再次发出相同的报错:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DYEOSpxw-1686410683192)(C:\Users\fems\AppData\Roaming\Typora\typora-user-images\image-20230610225957859.png)]

事件总结:使用@ComponentScan的时候必须包含整个工程中全部需要扫描的路径,默认路径失效后,将无法扫描其他包使用@ComponentScan的时候必须包含整个工程中全部需要扫描的路径,默认路径失效后,将无法扫描其他包

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值