码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis源码阅读(动态代理)

时间:2018-12-14 17:19:04      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:必看   初始   XML   阅读   数据库   shm   blog   obj   value   

这一篇文章主要是记录Mybatis的动态代理学习成果,如果对源码感兴趣,可以看一下上篇文章  https://www.cnblogs.com/ChoviWu/p/10118051.html

阅读本篇的读者应该都已经了解了用mapper调用xml下的内容是利用动态代理,本文将对这一部分的源码一探究竟

我们都知道,spring用bean注入的方式是以代理的方式注入的,那么当mapper调用更下游的(xml)的服务的时候,这个操作是怎么运作的呢?

在spring初始化bean的时候SqlsessionFactoryBean就已经把xml解析成mapper并储存在Configuration对象里,mapper下的所有接口都已经与xml的namespace匹配上,并且mapper注册为一个代理类

如下图:

技术分享图片

技术分享图片

将class的类作为key,所代理的对象作为value的HashMap数据结构存储

想必看了这么一点点可能有一点理解了,那么我们都知道,JDK 动态代理只能代理接口,而且还需要定义实现类,那 mybatis 是如何做到不需要实现类就轻松获取到代理对象的呢?

别急,看下方:

  当mapper全部都作为knownMappes的键值时,用户调用Mapper的时候,经过了如下步骤:

  技术分享图片

  看到这句想必就已经明白了!

  这种方式类似于截获了真正的代理对象,主要目的其实是将sqlSession以及代理对象传输到mapperMethod,

  而去执行其他的逻辑,通过MapperMethod实现数据库的访问操作

  如果该方法继承自Object(意味着该操作是一个对象操作而不是一个接口),

  如果是一个接口,将通过拿到的DefaultSqlSession执行该此操作

    技术分享图片

    这里面的操作都是对sqlSession对Executor的调用下执行的sql

mybatis源码阅读(动态代理)

标签:必看   初始   XML   阅读   数据库   shm   blog   obj   value   

原文地址:https://www.cnblogs.com/ChoviWu/p/10119744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!