Mybatis之拦截器Interceptor

Interceptor拦截器

Interceptor拦截器,可以拦截ParameterHandler,ResultHandler,StatementHandler,Executor的执行,这个接口定义了2个默认的方法,plugin和setProperties。plugin是获取代理类,setProperties是设置拦截器额外配置的属性。主要的就是intercept方法,这个方法是拦截后执行的方法。如果要实现自己的拦截器需要实现这个接口,并实现intercept方法。参数Invocation是封装的方法调用的信息。

Interceptor接口

再看下Invocation类,有3个变量,一个是目标对象target,一个方法method,再就是参数args。proceed方法通过反射方法调用目标方法。

Invocation

上文说过Plugin实现了InvocationHandler接口,现在就看看Plugin的invoke方法,这个方法如果是需要拦截的方法会调用

intercepter的intercept方法,此时生成了一个Invocation实例。如果不是拦截的方法,就通过反射调用原来的方法。

invoke方法

哪些类和方法是需要拦截的呢?

那就需要看两个注解,是Intercepts和Signature。这个两个方法配合使用才能产生效果,先看下注解Intercepts,这个注解需要有个Signature数组。

Intercepts注解

看看Signature需要三个值,一个是Class对象,一个方法名称,最后一个就是方法需要的参数类型。

Signature注解

获取哪些类型和方法需要拦截?首先获取拦截器的注解Intercepts,再获取Intercepts的Signature,从而获取需要拦截的发方法和参数。

获取哪些类型和方法需要拦截

一个简单的例子,拦截Executor类,并且拦截Executor中的query方法

一个简单的例子

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200225A0PQ1E00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券