• mybatis源码阅读(动态代理)


    这一篇文章主要是记录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

  • 相关阅读:
    树-1
    javaSE 2
    (蓝桥杯)蛇形矩阵的求法
    年轻母牛的故事
    互质环(序列)与最小公倍数的几种求法
    算法的复杂度
    Halo开源博客项目配置
    IDEA报错稀有语法问题
    带你跑ELADMIN后台管理系统开源项目
    相比c++,Java在基础语法的改变
  • 原文地址:https://www.cnblogs.com/ChoviWu/p/10119744.html
Copyright © 2020-2023  润新知