mybatis的mapper为什么不用写实现类的源码分析

首先看下我们spring和mybatis扫描包的时候是怎样写:

有两种写法:

  第一种写法:

<mybatis-spring:scan base-package="com.gupaoedu.crud.dao"/>

  

 

  第二种写法:

<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.gupaoedu.crud.dao"/>
</bean>

  

 

第一种写法是spring解析xml文件时提供了一个钩子方法给其他框架去解析他们自定义的标签

1.那为什么要去解析mybatis的NameSpaceHander呢他又没注入到容器里?

2.图中时scan而不是mybatis-spring:scan

问题解析:

首先配置applcationcContext.xml时

会加入这个文件,如果不加入的话就会xml的约束会提示mybatis-spring:scan报错的

spring启动的时候会查找META-INF/spring.handlers 这个文件下的内容,下图所示

这里就关联上了,spring会扫描这个文件下的内容

因此这下面三个东西就关联上了。<mybatis-spring:scan > 标签找到 http\://mybatis.org/schema/mybatis-spring 再找到org.mybatis.spring.config.NamespaceHandler

这样就可以解析自定义标签了

http\://mybatis.org/schema/mybatis-spring   
org.mybatis.spring.config.NamespaceHandler
mybatis-spring

下面这一点就是注入相应的解析器代码

现在分析spring+mybatis结合的入口分析

写法一入口查看:

写一部查看一下解析器里面的内容

写法二也是通过ClassPathMapperScanner扫描包的,所以这里也一同分析方法二

因为扫描的操作是一样的,后面再分析是怎么扫描的:

写法二是注入MapperScannerConfigurer: 打开查看

因为实现了BeanDefinitionRegistryPostProcessor 所以注入BeanDefinition后会调用postProcessBeanDefinitionRegistry

从上图所示也是和写法一一样通过ClassPathMapperScanner 来扫描包

查看ClassPathMapperScanner的继承的类

我们查看一下ClassPathMapperScanner.scan方法 他是他父类的方法来的

然后再查看doScan 这个ClassPathMapperScanner 重写了父类的方法:

现在查看一下this.processBeanDefinitions(beanDefinitions);

帮接口都注入了实现类mapperFactoryBean,

mapperFactoryBean如下

mapperFactoryBean构造方法是要带上类名的。。因为实现了FactoryBean 从容器取出对象时会调用getObject。从getOject里可以看到 this.getSqlSession().getMapper(this.mapperInterface);

这就是mybatis操作数据库的操作了。。所以文章也到此结束了

原文地址:https://www.cnblogs.com/dabenxiang/p/11038914.html

时间: 2024-11-07 23:28:21

mybatis的mapper为什么不用写实现类的源码分析的相关文章

关于java中ReentrantLock类的源码分析以及总结与例子

一,官方描述 关于ReentrantLock的官方描述,英文的就不贴出来了,这里我只贴出我自己翻译的描述: reentrant是一个跟synchronized具有相同行为和语义的持有锁来访问方法和语句的互斥锁,但是reentrant还拥有被扩展的能力. ReentrantLock会被线程拥有并且持续锁定,不会解锁.线程调用lock()方法返回后,则成功持有锁,否则这个锁正在被另一个线程所持有,只能等待另一个线程释放锁,如果当前线程拥有了锁,则调用lock()方法会立即返回,这个状态可以通过isH

JDK中String类的源码分析(二)

1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 1 public boolean startsWith(String prefix, int toffset) { 2 char ta[] = value; 3 int to = toffset; 4 char pa[] = prefix.value; 5 int po = 0; 6 int pc = prefix.value.l

【小白的java成长系列】——顶级类Object源码分析

首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是很喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到下面的: 下载自己喜爱的版本即可,解压,点击~/jdk-7u60-apidocs/api/index.html就可以查看其api了: 跟上网一样一样的,点击相应链接就可以查看其信息了. 进入正题,说说Object这个类: 先

String类常用方法源码分析

环境:JDK8 主要分析String类的一些常用的方法源码. String 先看String类的定义: public final class String    implements java.io.Serializable, Comparable<String>, CharSequence 可以看到String类被final修饰,因此不能被继承.String类还实现了序列化接口Serializable.可比较的接口Comparable并指定范型为String,该接口必须要实现int comp

Object类的源码分析

JDK 1.8中Object 的源码如下: 1 public class Object { 2 3 private static native void registerNatives(); 4 static { 5 registerNatives(); 6 } 7 8 /** 9 * Returns the runtime class of this {@code Object}. The returned 10 * {@code Class} object is the object tha

【MyBatis源码分析】环境准备

前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的基础之上,可以继续分析数据库连接池.Spring整合MyBatis源码.Spring事物管理tx等等. [MyBatis源码分析]整个文章结构相较[Spring源码分析]稍微改一改,后者会在每一部分源码分析的开头列出要分析的源码的实例,比如: 分析Bean流程加载,就会先写Bean的代码示例及xml

java Thread 类的源码阅读(oracle jdk1.8)

java线程类的源码分析阅读技巧: 首先阅读thread类重点关注一下几个问题: 1.start() ,启动一个线程是如何实现的? 2.java线程状态机的变化过程以及如何实现的? 1.start方法的源码如下: new Thread(Runnable):代码内部实际代码如下: /** * Initializes a Thread. * * @param g the Thread group * @param target the object whose run() method gets c

Mybatis 基于注解Mapper源码分析

目前Mybatis除了可以通过XML配置SQL外还可以通过注解的形式配置SQL,本文中主要介绍了Mybatis是如何处理注解SQL映射的,通过源码分析处理过程 XML配置 <configuration> <settings> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="useGeneratedKeys" value

MyBatis 源码分析 - 配置文件解析过程

* 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAliases和typeHandlers等,本文的篇幅也主要在对这三个配置解析过程的分析上.下面,我们来一起看一下本篇文章的目录结构. 从目录上可以看出,2.3节.2.5节和2.8节的内容比较多.其中2.3节是关于settings配置解析过程的分析,除了对常规的 XML 解析过程分析,本节额外的分析了元