解决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字符串转化对