解决springboot不扫描@repository的问题
問題:單獨(dú)使用@repository注解注dao層,而且不使用@mapperscan掃描時(shí),啟動(dòng)項(xiàng)目會(huì)報(bào)錯(cuò):
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的區(qū)別:
1.@mapper是mybatis的注解,@repository是spring家族的注解。
2.使用@mapper注解時(shí),spring并不認(rèn)識(shí),@autowired注入到service里的mapper會(huì)爆紅。
二,回到問題中來(lái),明明springboot里的ComponentScan掃描了啟動(dòng)器包下的所有含注解的組件,那為什么卻找不到@repository的組件?
原因:造成這個(gè)問題的原因是因?yàn)閟pringboot在掃描時(shí)候自動(dòng)過濾掉了接口和抽象類,所以@repository修飾的mapper接口并不能稱為一個(gè)bean,自然也就無(wú)法注入到service中。
三,解決方式:
第一種: 不使用@repository,在mapper層接口直接使用@mapper,但如果項(xiàng)目工程較大的話就會(huì)很麻煩。
第二種: 如果想使用@repository,因?yàn)閟pringboot無(wú)法掃描到mapper接口,則在啟動(dòng)器上使用@mapperscan掃描所有mapper接口的包,如:@MapperScan("com.sms.shiro.*.mapper")
第三種: 其實(shí)使用@mapperscan注解掃描mapper接口后,mapper接口就不需要@repository和@mapper去注冊(cè)bean了,但如果想項(xiàng)目結(jié)構(gòu)比較明了,在使用了@mapperscan掃描后,@repository和@mapper都可使用,都不會(huì)報(bào)錯(cuò)了,但是使用@repository會(huì)解決在service中@autowired mapper爆紅的問題。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的解决springboot不扫描@repository的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: v-model详细使用
- 下一篇: 将String类型的Json字符串转化对