解决springboot不扫描@repository的问题
问题:单独使用@repository注解注dao层,而且不使用@mapperscan扫描时,启动项目会报错:
Field xxxxMapper in com.sms.shiro.service.impl.xxxxServiceImpl required a bean of type ‘com.sms.shiro.mapper.xxxxMapper’ that could not be found.
一,@mapper和@repository的区别:
1.@mapper是mybatis的注解,@repository是spring家族的注解。
2.使用@mapper注解时,spring并不认识,@autowired注入到service里的mapper会爆红。
二,回到问题中来,明明springboot里的ComponentScan扫描了启动器包下的所有含注解的组件,那为什么却找不到@repository的组件?
原因:造成这个问题的原因是因为springboot在扫描时候自动过滤掉了接口和抽象类,所以@repository修饰的mapper接口并不能称为一个bean,自然也就无法注入到service中。
三,解决方式:
第一种: 不使用@repository,在mapper层接口直接使用@mapper,但如果项目工程较大的话就会很麻烦。
第二种: 如果想使用@repository,因为springboot无法扫描到mapper接口,则在启动器上使用@mapperscan扫描所有mapper接口的包,如:@MapperScan("com.sms.shiro.*.mapper")
第三种: 其实使用@mapperscan注解扫描mapper接口后,mapper接口就不需要@repository和@mapper去注册bean了,但如果想项目结构比较明了,在使用了@mapperscan扫描后,@repository和@mapper都可使用,都不会报错了,但是使用@repository会解决在service中@autowired mapper爆红的问题。
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的解决springboot不扫描@repository的问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: v-model详细使用
- 下一篇: 将String类型的Json字符串转化对