这里如果配置了property属性,那么我们可以在setProperties获取到。
完成以上两步,我们就完成了一个插件的配置了,接下来我们运行一下:
可以看到,setProperties方法在加载配置文件阶段就会被执行了。
[](()MyBatis插件实现原理
==========================================================================
接下来让我们分析一下从插件的加载到初始化到运行整个过程的实现原理。
[](()插件的加载
既然插件需要在配置文件中进行配置,那么肯定就需要进行解析,我们看看插件式如何被解析的。我们进入XMLConfigBuilder类看看
解析出来之后会将插件存入InterceptorChain对象的list属性
看到InterceptorChain我们是不是可以联想到,MyBatis的插件就是通过[责任链模式](()实现的。
[](()插件如何进行拦截
=====================================================================
既然插件类已经被加载到配置文件了,那么接下来就有一个问题了,插件类何时会被拦截我们需要拦截的对象呢?
其实插件的拦截是和对象有关的,不同的对象进行拦截的时间也会不一致,接下来我们就逐一分析一下。
[](()拦截Executor对象
我们知道,[SqlSession](()对象是通过openSession()方法返回的,而[Executor](()又是属于SqlSession内部对象,所以让我们跟随openSession方法去看一下Executor对象的初始化过程。