mybatis中的动态代理实现它的Plugin功能

Executor代理对象的创建:

我们需要知道是谁去执行我们的sql操作的:在这里插入图片描述
为什么要从selectList的后续开始找,因为我们的mybatis有一种写法是这样的在这里插入图片描述
直接调用这个方法即可:在这里插入图片描述
所以我们直接从selectList开始走,知道是Executor对象过后 我们去看它是如何创建代理的:
1.executor是在openSession方法中创建的:
在这里插入图片描述
2.创建executor对象:在这里插入图片描述
3.进入插件的功能中:在这里插入图片描述
4.遍历所有的对象给我们的插件添加功能
在这里插入图片描述
在这里插入图片描述
5.代理对象的从创建

在这里插入图片描述
6.继续创建代理 , 我们看到这里的代理是嵌套的代理对象 本质上都是同一个对象 它一直被嵌套创建代理
在这里插入图片描述
其实我们的有很多对象在创建的时候都有添加插件功能 不只是executor,比如mybatis里面的statementHandler也实现了这个功能,其他的自己找把。
在这里插入图片描述

插件拦截的使用:

其他的我们就不看了 直接看executor调用query的时候执行的代理的方法:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


版权声明:本文为m0_49708063原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。