mybatis - plugin(插件)

mybatis插件

mybatis源码写的极好,mybatis属于相对轻量级的orm框架,包含的功能并没有太多,较容易感受它的设计之美,所以用博客的方式进行记录;


mybatis插件在四处有使用到:

  1. 对sql入参 prameterHandler进行插件化处理
  2. 对sql出参result进行插件化处理
  3. 对stamentHandler进行插件化处理
  4. 对executor进行插件化处理;

mybatis的插件与平时所熟知的拦截器和过滤器类似,但设计并不相同,譬如:

  1. springmvc的HandlerInterceptor接口:拦截器实现类功能比较单一,并不参与调用链的调度,比较简单的一组接口的实现类;
  2. 过滤器:- 责任链模式,每个filter处理的时候入参中有chain对象,在执行完filter中的before后将控制权再交回给chain,由chain进行调度下一个before;然后调用链如图:

  • mybatis中的插件实现了Interceptor接口,其实现的方式属于装饰器模式;

  • 将执行插件的target交给插件,插件返回一个代理对象;将该代理对象传给下一个插件,进行装饰

  • 引入Plugin对象,将target和插件this传给Plugin


  • 对target进行包装,将插件功能包装在代理对象中

  • 对target进行包装,通过cglib对target进行代理;

  • 传入的InvocationHandler是Plugin本身;

  • 当调用target方法时,进入Plugin中的invoke方法;

  • 这时才真正的对target方法有选择性的调用拦截器;

  • 而拦截器中的实现只需要关注拦截逻辑的处理,因为target中的方法调用交给Invocation对象中调用;

单拿出mybatis中的插件进行表述的原因是,感觉设计的还是很有意思的;扩展性很好,同时有别于其它的拦截器和过滤器的实现;

转载于:https://my.oschina.net/u/257801/blog/3099446

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值