@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掃描的是同一路徑會產生錯誤,所以
1
2
|
@MapperScan (basePackages = { "com" }) @SpringBootApplication |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/m0_37597572/article/details/82625631