Executor代理对象的创建:
我们需要知道是谁去执行我们的sql操作的:
为什么要从selectList的后续开始找,因为我们的mybatis有一种写法是这样的
直接调用这个方法即可:
所以我们直接从selectList开始走,知道是Executor对象过后 我们去看它是如何创建代理的:
1.executor是在openSession方法中创建的:
2.创建executor对象:
3.进入插件的功能中:
4.遍历所有的对象给我们的插件添加功能
5.代理对象的从创建
6.继续创建代理 , 我们看到这里的代理是嵌套的代理对象 本质上都是同一个对象 它一直被嵌套创建代理
其实我们的有很多对象在创建的时候都有添加插件功能 不只是executor,比如mybatis里面的statementHandler也实现了这个功能,其他的自己找把。
插件拦截的使用:
其他的我们就不看了 直接看executor调用query的时候执行的代理的方法: