@MapperScan和@ComponentScan使用问题
報錯如下
原因:當@MapperScan和@ComponentScan一起使用時,項目啟動時掃描包會發(fā)生沖突,找不到swagger配置類的包和mapper接口的包
解決辦法:@MapperScan和@ComponentScan可以一起使用。
改為@MapperScan(basePackages = {})的形式。
或者只使用@MapperScan()去掃描mapper包,讓項目啟動自己去掃描swagger配置類的包
課外拓展:
@MapperScan
1.首先了解@Mapper
在持久層的接口上添加@Mapper注解,編譯后會生成相應的接口實現(xiàn)類,但由于要在每個接口上都進行配置,所以產(chǎn)生了@MapperScan。
2.@MapperScan
指定要編譯成接口實現(xiàn)類的包路徑,在編譯完成后這個包下的所有接口都會生成相應的接口實現(xiàn)類。
@ComponentScan
1.會自動掃描包路徑下的@Controller、@Service、@Repository、@Component類,符合掃描規(guī)則的類會裝配到spring容器中。
2.@MapperScan和@ComponentScan可以同時使用
如果@MapperScan和@ComponentScan掃描的是同一路徑會產(chǎn)生錯誤,所以
@MapperScan(basePackages = { "com" }) @SpringBootApplication項目場景:
最近在使用SpringBoot搭建項目,使用了Mybatis的generator自動生成mapper和mapper.xml。在mapper注入的時候,發(fā)現(xiàn)自己對mapperscan、mapper、componentscan注解的理解不是很深入,因此,在這里記錄一下。
問題描述:
SpringBoot項目啟動后,發(fā)現(xiàn)mapper并沒有注入到容器中。分析原因是在mapper類中少加了mapper注解,或者是主啟動類中沒有加mapperscan注解。其實歸根結底還是因為對于這三個注解理解不深。
三種注解區(qū)別:
@ComponentScan注解
ComponentScan就是告訴Spring從哪里找到bean Spring會在應用主程序所在的包及其子包下進行全局掃描,把對應的bean注入到容器中,這里面的bean包括service mapper resposioty controller 所以在springboot程序中如果有mapper注解的話 就不用再加mapperscan注解,springboot注解自帶componentscan,會掃描到。
@MapperScan注解
@Mapper注解可以在編譯之后生產(chǎn)對應的接口實現(xiàn)類,如果要每個接口都編程實現(xiàn)類,需要在每個接口上加上Mapper注解,比較麻煩,解決這個問題用的是@MapperScan注解,mapperscan注解后面可以加value指定要掃描的包,即可實現(xiàn)mapper的注入。
其實MapperScan完成了兩件事情:
根據(jù)配置的路徑進行mapper.java的掃描 此處掃描到的就是mapper下的java文件為掃描到的mapper進行注冊BeanDefinition。
總結
以上是生活随笔為你收集整理的@MapperScan和@ComponentScan使用问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rust(63)-全局静态变量
- 下一篇: rust(64)-指针类型(1)