基於@MapperScan和@ComponentScan的使用區別
@MapperScan和@ComponentScan區別
今天在擼SpringBoot的時候,突然對註解產生瞭混淆,@MapperScan和@ComponentScan都是掃描包,二者之間有什麼區別呢?
首先,@ComponentScan是組件掃描註解,用來掃描@Controller @Service @Repository這類,主要就是定義掃描的路徑從中找出標志瞭需要裝配的類到Spring容器中
其次,@MapperScan 是掃描mapper類的註解,就不用在每個mapper類上加@MapperScan瞭
這兩個註解是可以同時使用的。
@MapperScan和@ComponentScan使用
報錯如下
原因
當@MapperScan和@ComponentScan一起使用時,項目啟動時掃描包會發生沖突,找不到swagger配置類的包和mapper接口的包
解決辦法
@MapperScan和@ComponentScan可以一起使用。
改為@MapperScan(basePackages = {})的形式。
或者隻使用@MapperScan()去掃描mapper包,讓項目啟動自己去掃描swagger配置類的包
課外拓展
@MapperScan
- 1.首先瞭解@Mapper
- 在持久層的接口上添加@Mapper註解,編譯後會生成相應的接口實現類,但由於要在每個接口上都進行配置,所以產生瞭@MapperScan。
- 2.@MapperScan
- 指定要編譯成接口實現類的包路徑,在編譯完成後這個包下的所有接口都會生成相應的接口實現類。
@ComponentScan
- 1.會自動掃描包路徑下的@Controller、@Service、@Repository、@Component類,符合掃描規則的類會裝配到spring容器中。
- 2.@MapperScan和@ComponentScan可以同時使用
如果@MapperScan和@ComponentScan掃描的是同一路徑會產生錯誤,所以
@MapperScan(basePackages = { "com" }) @SpringBootApplication
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springBoot mybatis 包掃描實例
- 解決springboot報錯找不到自動註入的service問題
- SpringBoot默認包掃描機制及@ComponentScan指定掃描路徑詳解
- springboot啟動掃描不到dao層接口的解決方案
- @MapperScan和@ComponentScan一塊使用導致沖突的解決