springboot集成下,mybatis的mapper代理对象究竟是如何生成的

  开心一刻   

    中韩两学生辩论。
    中:端午节是属于谁的?
    韩:韩国人!
    中:汉字是谁发明的?
    韩:韩国人!
    中:中医是属于谁的?
    韩:韩国人!
    中:那中国人到底发明过什么?
    韩:韩国人!

springboot集成下,mybatis的mapper代理对象究竟是如何生成的

前情回顾

  Mybatis源码解析 - mapper代理对象的生成,你有想过吗,我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建SqlSession,然后再创建获取mapper代理对象,最后利用mapper代理对象完成数据库的操作;Mapper代理对象的创建,利用的是JDK的动态代理,InvocationHandler是MapperProxy,后续Mapper代理对象方法的执行都会先经过MapperProxy的invoke方法。

  但是,此时SqlSessionFactory的创建、SqlSession的创建以及mapper代理对象的获取都是我们手动操作的,实际应用中,mybatis往往也不会单独使用,绝大多数都是集成在spring中,也就是说我们无需手动去管理mybatis相关对象的生命周期,全部都由spring容器统一管理,那么spring是什么时候在哪创建的mybatis的相关对象的呢?尤其是mapper代理对象MapperProxy的创建

Springboot集成mybatis

  当springboot(其实还是spring)集成mybatis后,mybatis的对象是交给spring容器管理的,只会实例化一次,然后伴随着spring容器一直存在,直到spring容器销毁

  自动配置:MybatisAutoConfiguration

springboot集成下,mybatis的mapper代理对象究竟是如何生成的

    Mybatis的自动配置类:MybatisAutoConfiguration,至于如何加载此类,可参考:spring-boot-2.0.3不一样系列之源码篇 - springboot源码一,绝对有值得你看的地方

    MybatisAutoConfiguration会被当做配置类被spring解析,我们来看看spring容器会从此配置类中解析到什么

springboot集成下,mybatis的mapper代理对象究竟是如何生成的

     创建了SqlSessionFactory实例(实际类型:DefaultSqlSessionFactory),并注册到了spring容器;此时我们应该还注意到

@Import({ AutoConfiguredMapperScannerRegistrar.class })

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjdsz.html