獲取接口的實現類對象
第三步看獲取接口的實現類對象,主要就是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)
對象