基于@MapperScan和@ComponentScan的使用区别

目录
  • @MapperScan和@ComponentScan区别
  • @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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决Spring使用@MapperScan问题

    目录 问题场景 问题根源 问题追溯 问题解决 SpringBoot  @MapperScan的注意事项 问题场景 今天小编在MyBatis 整合Spring 的时候,使用到了@MapperScan,在启动期出现了一个错误: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean() 对于这个错误,小编也是倍感无奈,怎么会出现这个错误呢,看一下我的依赖

  • 浅谈@mapper引入不到引入的是@MapperScan的问题

    两种防水都可以,但是使用方式不同. @mapper需要mybatis和mybatis-spring的版本足够的高才可以. 不然导入不到@mapper. 补充知识:关于MyBatis的@Mapper和@MapperScan注解的一点思考 最近有空回顾mybatis,想起@Mapper注解一直没弄明白是干嘛的,代码上的注释写的很简单(Marker interface for MyBatis mappers),开发过程中也没用到,但网上各种资料偶有出现他的身影.问了度娘,都没讲清楚,我决定自己思考下这

  • MyBatis中Mapper的注入问题详解

    在 SpringBoot 体系中,MyBatis 对 Mapper 的注入常见的方式我知道的有 2 种: 1.@MapperScan MapperScan 类是 mybatis-spring 包里面的. 通过在启动类上使用 @MapperScan,然后通过 basePackages 属性指定 Mapper 文件所在的目录来进行扫描装载,默认情况下指定目录下的所有.java文件都会被当做 Mapper 来加载处理. @MapperScan(basePackages = "com.test.spri

  • @MapperScan注解与@Mapper注解的使用

    目录 @MapperScan注解与@Mapper注解使用 MapperScan注解和@Mapper的区别 @MapperScan注解与@Mapper注解使用 @Mapper一般对应一个接口,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类. 当我们写的mapper接口比较多的时候,我们没必须花太多时间一个一个的写,这样写太麻烦了,我们可以使用@ManpperScan注解,指明要扫描的包,它可以扫描所有的mapper文件. 它是如何做到的,我们可以查看里面的源码,主要起作用

  • 基于@MapperScan和@ComponentScan的使用区别

    目录 @MapperScan和@ComponentScan区别 @MapperScan和@ComponentScan使用 原因 解决办法 课外拓展 @MapperScan和@ComponentScan区别 今天在撸SpringBoot的时候,突然对注解产生了混淆,@MapperScan和@ComponentScan都是扫描包,二者之间有什么区别呢? 首先,@ComponentScan是组件扫描注解,用来扫描@Controller @Service @Repository这类,主要就是定义扫描的路

  • 基于Python __dict__与dir()的区别详解

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __dict__是一个字典,键为属性名,值为属性值: dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict__是dir()的子集: 并不是所有对象都拥有__dict__属性.许多内建类型就没有__dict__属性,如list,此时就需要用dir()来列出对象的所有属性. __di

  • 基于Android MarginLeft与MarginStart的区别(详解)

    我们在写layout布局的时候,我们会发现有这样几个比较相似的属性: MarginStart   MarginLeft MarginEnd    MarginRight 这些属性的区别是什么?  根据api注释,我们得知MarginStart指的是控件距离开头View部分的间距大小,MarginLeft则指的是控件距离左边View部分的间距大小,MarginEnd和MarginRight同理. 一般情况下,View开始部分就是左边,但是有的语言目前为止还是按照从右往左的顺序来书写的,例如阿拉伯语

  • 基于Django OneToOneField和ForeignKey的区别详解

    根据Django官方文档介绍: A one-to-one relationship. Conceptually, this is similar to a ForeignKey with unique=True, but the "reverse" side of the relation will directly return a single object. OneToOneField与ForeignKey加上unique=True效果基本一样,但是用OneToOneField反

  • 基于CyclicBarrier和CountDownLatch的使用区别说明

    2018.12.12更新 在学习了CyclicBarrier之后发现,CyclicBarrier也可以实现跟CountDownLatch类似的功能,只需要在它的parties中多设置一个数,将主线程加入等待队列就可以了: public static void main(String[] args) { ExecutorService pool = Executors.newCachedThreadPool(); int size = 3; // 设置参数时,线程实际执行数size+1,将main

  • @MapperScan和@ComponentScan一块使用导致冲突的解决

    目录 @MapperScan和@ComponentScan一块使用冲突 解决方案 方案一 方案二 项目中@MapperScan和@Mapper共存之坑XxxMapper that could not be found. 尝试解决 @MapperScan和@ComponentScan一块使用冲突 项目集成了knief4j 报错: NoSuchBeanDefinitionException: No qualifying bean of type 'springfox.documentation.sc

  • 基于Python 函数和方法的区别说明

    简单总结: 1.与类和实例无绑定关系的function都属于函数(function): 2.与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数(FunctionType) 函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值.可以直接在模块中进行定义使用. 所有传递给函数的数据都是显式传递的. 方法(MethodType) 方法和函数类似,同样封装了独立的功能

  • 基于R语言赋值符号的区别说明

    R语言赋值可以用=或<-,一般都建议使用<-,那你知道这两个之间的区间吗?那你有没有见过'<-'和'='这种赋值方法吗?今天就来和大家聊聊这基本的赋值符号都有哪些区别. 首先我们来看看符号的优先级,和java,c这些编程语言的优先级类似.下面这些都取自R帮助文档,输入?Syntax即可查看,它是根据优先级从高到低排列的. :: ::: access variables in a namespace $ @ component / slot extraction [ [[ indexing

  • 基于Python3中运算符 **和*的区别说明

    我们知道**代表次方. 如下 >>>12 * 12 144 >>>12 ** 2 144 >>>a=1e200 >>> a 1e+200 >>>a ** 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: (34, 'Result too large'

  • 基于unique与primary约束的区别分析

    定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUE约束的字段上可以包含空值. ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引: UNIQUED 可空,可以在一个表里的一个或多个字段定义: PRIMARY KEY不可空不可重复,在一个表里可以定义联合主键:简单的说,  primary k

随机推荐