深入理解Mybatis插件 (2)

整体实现其实也很简单,我们想给那个类的哪个方法拦截一下,把实现拦截器,然后配置下要拦截的信息,之后mybatis给我们生成一个动态代理对象,就可以了。

下面我们以具体案例来更加深刻的认识理解其实现原理

加强理解

我们使用具体的案例,来走一遍

Case 1 单拦截器单拦截方法 @Intercepts( {@Signature( type= Executor.class, method = "update", args = {MappedStatement.class ,Object.class})} ) public class ExamplePlugin implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { System.out.println("before execute update"); Object returnObject = invocation.proceed(); System.out.println("after execute update"); return returnObject; } }

假设目前我们就设置了这么一个拦截器

那么就会生成一个CachingExecutor的代理对象,我们假设代理对象的全限定名是com.sun.proxy.$Proxy0,并且这个对象对象是implements Executor的

这时调用代理对象的update方法调用栈如下

mybatis-plugin

Case 2 单拦截器多拦截方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppydw.html