【Mybatis 源碼】 獲取接口的實現類對象 getMapperxW

第三步看獲取接口的實現類對象,主要就是opnSession對象的getMApper方法,使用MapperProxyFactory返回MapperProxy的代理對象,這個代理對象裏面包含了DefaultSqlSessionsql

一句話總結,就是經過動態代理 用MapperProxy建立接口代理對象
在這裏插入圖片描述
app

流程圖

在這裏插入圖片描述

在這裏插入圖片描述

調用configuration的getMapper()方法
在這裏插入圖片描述
spa

mapperRegistry.getMapper()

調用mapperRegistry.getMapper() 方法
在這裏插入圖片描述
mapperRegistry.getMapper()方法以下:

.net

在這裏插入圖片描述

獲取MapperProxyFactory

configuration的mapperRegistry屬性保存了 接口對應的工廠
在這裏插入圖片描述
mapperRegistry.getMapper() 方法第一步就先根據接口類型獲取MapperProxyFactory

3d

mapperProxyFactory.newInstance(sqlSession)

由於咱們最後是用mapperProxy建立一個mapper,其中用的就是Proxy.newProxyInstance()這個方法建立對象,這個方法須要傳入InvocationHandler。
咱們的 MapperProxy 就實現了InvocationHandler,這裏new MapperProxy 就是Proxy.newProxyInstance()要用到的第三個參數
具體和AOP底層原理部分建立代理對象均可以一一對應。
在這裏插入圖片描述


代理

首先new 了一個MapperProxy,而後再建立MApperProxy的代理對象
在這裏插入圖片描述
最後得到的代理對象
在這裏插入圖片描述


code

MapperProxy

MapperProxy 實現了InvocationHandler(作動態代理須要proxy對象 須要傳入InvocationHandler)
在這裏插入圖片描述
對象

相關文章
相關標籤/搜索