Mybatis中的Plugin是依赖Interceptor
接口实现的,这里面还用到了责任链模式 Chain of responsibility
1 | interceptorChain.addInterceptor(interceptor); |
上面的InterceptorChain
在调用pluginAll
的时候会应用所有的plugin
1 | default Object plugin(Object target) { |
具体的就是,依次生成JDK dynamic proxy对象,并且将对具体statement的调用应用拦截器,形成调用链,及责任链模式。
如图所示
举个栗子:
1 | # Reviewer基础类 |
责任链的作用很明显了,解藕,可以在sender和receiver之间添加更多的逻辑