当前位置: 首页 > 网络应用技术

Mybatis源代码分析05:拦截器

时间:2023-03-06 23:50:16 网络应用技术

  注意:此系列源代码分析基于Mybatis 3.5.6,源代码的源代码,源代码仓库地址:Funcy/Mybatis。

  Mybatis的拦截器可以拦截一些操作。相应的mybatis文档是mybatis插头-in

  与文档相反,让我们先准备演示!

  根据文档内容,我们准备一个拦截器:

  将拦截器添加到配置文件中:

  运行,结果如下:

  可以看出,执行SQL已成功打印。

  2.1分析拦截器是在MyBatis配置文件中配置的,因此拦截器也将在解析配置文件中解析:

  分析操作更常规,因此我们不分析观察拦截器过程的主要方法:

  拦截器最终存储在类的成员变量中。

  这是什么?我们继续:

  从代码来看,它在内部维护一种成员变量,提供和操作方法。

  2.2组装Mybatis的拦截器存储在类的成员变量中。这些拦截器如何在执行链接上组装?让我们回到途中,有这样的行:

  它用于处理拦截器加载:

  此处传递的类型是,也是返回。

  继续输入该方法:

  这是接口的默认方法。电话是我们继续:

  从代码的角度来看,JDK的动态代理函数将生成代理对象。它已实现。它的方法是拦截的关键。我们将稍后进行分析。

  在该示例中,将原始内容传递给,并获得了动态代理类:

  本文中使用的示例是拦截和方法。实际上,还有其他拦截方法。Mybatis Interceptor支持的方法如下:

  这些方法的拦截配置没有太大不同,因此不再有分析。

  在对上一节的分析中,我们得到了动态代理对象,那么它何时执行?

  实际上,被动代理的对象在执行该方法时会调用主题的方法,动态代理对象是,我们输入其方法:

  在该方法中,首先确定该方法是否应拦截。对于需要拦截的方法,该方法被调用,否则该方法将直接调用。

  在执行中,传递的参数是,让我们看看它是什么:

  该类主要保留,当重写方法时,我们可以根据这些内容完成一系列操作。

  还有一个重要的方法:此方法将执行目标方法的逻辑,例如当我们实施它时,它将被使用:

  处理拦截操作后,不要忘记执行原始逻辑的呼叫。

  本文是对拦截器机制的分析,分析了分析,组装和执行过程。在最终分析中,拦截器仍然使用JDK提供的动态代理函数。

  这就是拦截器的相关分析。

  本文中的原始链接:https://my.oschina.net/funcy/blog/4952678,仅限于作者的个人级别,文章中有不可避免的事情,欢迎使用CROCKE!请与作者联系以获取业务重印。请指示非商业重印的来源。

  原始:https://juejin.cn/post/7102812108902891550