1:场景分析
在我们使用SpringBoot+MyBatis的时候,我们一般是先引入依赖,然后配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.coco.pojo
当然还要在启动类上加上一个注解

这时候,就可以编写一个接口,然后调用这个方法就可以执行配置文件中对应的SQL语句了

那么底层原理到底是怎么实现的呢??
2:万事开头难
分析一个框架源码的时候最难的就是不知道该从哪开始,我是这样想的,既然我们只要写一个这样的接口,那么就可以调用对应的SQL语句,那么肯定是在哪个环节对这个接口做一些特殊的处理
我们在启动类上加了一个注解,而且注解中的包路径正是我们接口的路径,这时候我们就有点眉目了。
进入 @MapperScan(“com.coco.mapper”) 这个注解中

我们看到除了注解的基本三个注解之外,还有一个注解就是 @Import({MapperScannerRegistrar.class}),很多小伙伴可能不知道这个注解有什么用,我们先解释一下
3: SpringBoot中@Import注解的作用
在SpringBoot中当我们要声明一个Bean的时候,我们可以在该类上加上 @Service,@Compont等,或者是在配置类中加上 @Bean 这个注解,除此之外还有一种方法,就是 @Import
@Import注解中会标明一个类,而且在SpringBoot启动的时候会处理也就是会实例化这个Bean,也就是会对这个Bean做一些处理
4: MapperScannerRegistrar.class的作用
即然知道了 @Import注解的作用,那现在我们进入到这个类中看看,这个类实现了ImportBeanDefinitionRegistrar 这个接口

这个接口有什么用呢??简单的来说就是MyBatis通过这个入口可以让Spring扫描到某些Bean,并且这些Bean会被Spring所管理,也就是说这些Bean会被Spring进行初始化。
所以我们自定义的Mapper接口会被Spring扫描到,然后会被Spring进行加载
ImportBeanDefinitionRegistrar 这个接口就代表着当把Bean生成了对应的BeanDefinition的时候,就会调用这个接口的方法,我们看下这个接口中定义的方法

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



