Mybatis通过Spring完成代理类注入的流程分析
流程分析
首先,使用mybatis的时候会定义mapper接口的基础包,一般我们会用@MapperScanner这个注解,来看下这个注解

来看下这个MapperScannerRegistrar类

这个类实现了ImportBeanDefinitionRegistrar也就是spring注册beanDefined时候需用到,这个重写了一下,这个方法里,前面的话是一些基础属性的赋值,最重要的是这个方法

根据basePackages去进行扫描,来跟下这个方法

首先会调用父类生成一个BeanDefinitionHolder的集合,重点是这个方法processBeanDefinitions,而在这个方法里,重中之重的是这个

很形象,偷换概念了,将这个bean的实现类换成了MapperFactoryBean,它肯定实现了FactoryBean的接口并实现了getObject这个方法,getObject也就是我们实例化bean获取bean的途径,继续往下跟,果然

之后是这个

之后是这个

调用了MapperRegistry,来看下

最后到了MapperProxyFactory,来看下

按照如下的步骤进行调用的,最后通过jdk动态代理的方法,绑定mapper接口的最终实现是mapperProxy
总结
关于mybatis是如何将代理类绑定到mapper接口的,大概流程是这样,通过实现ImportBeanDefinitionRegistrar,重新定义这个beanClass为
MapperFactoryBean,这个类的话是一个FactoryBean有自己的getObject方法,通过调用当前对象的SqlSession对象的getMapper方法,转而到从这个对象的configuration对象中getMapper,进而从这个对象的mapperRegistry获取,而在MapperRegistry使用mapperProxyFactory实例化,通过代理绑定MapperProxy为这个接口的真正实现类,之后的话,我们调用mapper,其实就是调用了mapperProxy,之后的流程上一张已经提过
栏 目:JAVA代码
下一篇:解析Java的InputStream类并借助其读取ppt文件
本文标题:Mybatis通过Spring完成代理类注入的流程分析
本文地址:http://www.codeinn.net/misctech/194394.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




