基于@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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
@MapperScan注解与@Mapper注解的使用
目录 @MapperScan注解与@Mapper注解使用 MapperScan注解和@Mapper的区别 @MapperScan注解与@Mapper注解使用 @Mapper一般对应一个接口,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类. 当我们写的mapper接口比较多的时候,我们没必须花太多时间一个一个的写,这样写太麻烦了,我们可以使用@ManpperScan注解,指明要扫描的包,它可以扫描所有的mapper文件. 它是如何做到的,我们可以查看里面的源码,主要起作用
-
MyBatis中Mapper的注入问题详解
在 SpringBoot 体系中,MyBatis 对 Mapper 的注入常见的方式我知道的有 2 种: 1.@MapperScan MapperScan 类是 mybatis-spring 包里面的. 通过在启动类上使用 @MapperScan,然后通过 basePackages 属性指定 Mapper 文件所在的目录来进行扫描装载,默认情况下指定目录下的所有.java文件都会被当做 Mapper 来加载处理. @MapperScan(basePackages = "com.test.spri
-
浅谈@mapper引入不到引入的是@MapperScan的问题
两种防水都可以,但是使用方式不同. @mapper需要mybatis和mybatis-spring的版本足够的高才可以. 不然导入不到@mapper. 补充知识:关于MyBatis的@Mapper和@MapperScan注解的一点思考 最近有空回顾mybatis,想起@Mapper注解一直没弄明白是干嘛的,代码上的注释写的很简单(Marker interface for MyBatis mappers),开发过程中也没用到,但网上各种资料偶有出现他的身影.问了度娘,都没讲清楚,我决定自己思考下这
-
解决Spring使用@MapperScan问题
目录 问题场景 问题根源 问题追溯 问题解决 SpringBoot @MapperScan的注意事项 问题场景 今天小编在MyBatis 整合Spring 的时候,使用到了@MapperScan,在启动期出现了一个错误: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean() 对于这个错误,小编也是倍感无奈,怎么会出现这个错误呢,看一下我的依赖
-
基于@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
随机推荐
- linux软件版本管理命令update-alternatives使用详解
- 详解jquery插件jquery.viewport.js学习使用方法
- Java关键字final、static使用总结
- 深入PHP获取随机数字和字母的方法详解
- yii去掉必填项中星号的方法
- PHP网页游戏学习之Xnova(ogame)源码解读(十四)
- php字符串截取问题
- YII2 实现多语言配置的方法分享
- php PATH_SEPARATOR判断当前服务器系统类型实例
- BootStrap中Datepicker控件带中文的js文件
- Ajax在请求过程中显示进度的简单实现
- 利用C#远程存取Access数据库
- 基于JQuery及AJAX实现名人名言随机生成器
- jquery Mobile入门—外部链接切换示例代码
- CSS Filter背景透明提示
- 解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
- java多线程编程之从线程返回数据的两种方法
- C#中List和数组之间转换的方法
- php图形jpgraph操作实例分析
- 详解Android图表 MPAndroidChart折线图