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注解完成插件签名
三、将写好的插件注册到全局配置文件中
建立动态代理的时候,是按照插件配置顺序建立层层的代理对象,执行目标方法后按照逆向顺序执行