基於@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。

推薦閱讀: