Executor(update、query、flushstatement、commit、rollback、getTransaction)插件
ParameterHandler(getParameterObject、setParameter、close、isclosed)代理
ResultSetHandler(handlerResultSets,handlerOutputParameters)對象
statementHandler(prepare,parameterize,batch,update,query)接口
一、每一個建立出來的對象不是直接返回的,而是interceptorChain.pluginAll(parameterHandler)get
二、獲取到全部的Interceptor(攔截器)插件須要實現的接口,調用interceptor.plugin(target)返回target包裝的對象it
三、插件機制:使用插件爲目標對象建立一個代理對象(AOP面向切面)io
Interceptor(攔截器)攔截目標對象的目標方法的執行sed
Plugin:包裝目標方法:包裝,爲目標對象建立一個代理對象,插件會建立目標對象的代理對象配置
插件編寫:date
一、編寫Interceptor的實現類
二、使用@Interceptors註解完成插件簽名
三、將寫好的插件註冊到全局配置文件中
建立動態代理的時候,是按照插件配置順序建立層層的代理對象,執行目標方法後按照逆向順序執行