mybatis源码写的极好,mybatis属于相对轻量级的orm框架,包含的功能并无太多,较容易感觉它的设计之美,因此用博客的方式进行记录;spring
mybatis插件在四处有使用到:sql
mybatis的插件与平时所熟知的拦截器和过滤器相似,但设计并不相同,譬如:mybatis
mybatis中的插件实现了Interceptor接口,其实现的方式属于装饰器模式; mvc
将执行插件的target交给插件,插件返回一个代理对象;将该代理对象传给下一个插件,进行装饰框架
引入Plugin对象,将target和插件this传给Pluginthis
对target进行包装,将插件功能包装在代理对象中 插件
对target进行包装,经过cglib对target进行代理;设计
传入的InvocationHandler是Plugin自己; 3d
当调用target方法时,进入Plugin中的invoke方法; 代理
这时才真正的对target方法有选择性的调用拦截器;
而拦截器中的实现只须要关注拦截逻辑的处理,由于target中的方法调用交给Invocation对象中调用;
单拿出mybatis中的插件进行表述的缘由是,感受设计的仍是颇有意思的;扩展性很好,同时有别于其它的拦截器和过滤器的实现;