target传入到插件的plugin方法中, 让插件对参数/返回值/语句/执行器做修改,如下图所示
?...使用动态代理的方式调用插件功能
这是一个通用的思路,在想对一个原有的方法/功能进行加强的时候,首要的思路就是使用代理, 然后采用如下的代码格式来加强
beforeInvoke();//在调用之前加强proxy.invoke...我们都知道jdk的动态代理的前提是对接口做加强...., 动态代理的参数interfaces中才会加入这个接口....然后在执行Mybatis的mapper的时候,就可以走我们插件里面逻辑了
总结
MyBatis源码并不难,整理好逻辑好一步步的跟踪下去就可以了,建议阅读本文时把mybatis源码也打开,跟着一起看,紧紧抓住动态代理的实现就肯定会把这个弄清的