目录

1.拦截器执行流程

2.拦截器实现原理

3.拦截器用法


1.mybatis拦截器实现原理

2.拦截器实现原理

在Mybaits中 拦截器需实现Interceptor接口,加上如下注解

@Intercepts({@Signature(type = StatementHandler.class, method = "prepare",args = { Connection.class, Integer.class})
})

表示代理对象是StatementHandler 代理的方法是prepare  只有执行prepare方法是 才会执行拦截器的拦截策略 ,mybatis是先加载所有的拦截器,然后在代理执行的时候 逐步遍历 责任链模式

拦截器的本质实现还是代理对象

  public static Object wrap(Object target, Interceptor interceptor) {Map<Class<?>, Set<Method>> signatureMap = getSignatureMap(interceptor);Class<?> type = target.getClass();Class<?>[] interfaces = getAllInterfaces(type, signatureMap);if (interfaces.length > 0) {return Proxy.newProxyInstance(type.getClassLoader(),interfaces,new Plugin(target, interceptor, signatureMap));}return target;}

3.自己实现一个拦截器

@Intercepts({@Signature(type = StatementHandler.class, method = "prepare",args = { Connection.class, Integer.class})
})
public class LongYiLogPlugin implements Interceptor {private final  Logger log=LoggerFactory.getLogger(this.getClass());@Overridepublic Object intercept(Invocation invocation) throws Throwable {StatementHandler statementHandler=(StatementHandler)invocation.getTarget();BoundSql boundSql=statementHandler.getBoundSql();String sql = boundSql.getSql();log.info("mclong intercept sql=>{}",sql);return invocation.proceed();}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target,this);}@Overridepublic void setProperties(Properties properties) {String dialect =String.valueOf(properties.get("dialect")) ;log.info("mclongyi mybatis intercept dlatect {}",dialect);}
}

Mybatis 拦截器执行原理分析相关推荐

  1. 关于Mybatis拦截器的使用

    关于Mybatis拦截器的使用 1 Mybatis拦截器的使用 1 自定义拦截器 1 Interceptor接口 2 @Intercepts注解 3 @Signature注解 2 注册拦截器 3 拦截 ...

  2. 犯罪心理解读Mybatis拦截器

    原文链接:"犯罪心理"解读Mybatis拦截器 Mybatis拦截器执行过程解析 文章写过之后,我觉得 "Mybatis 拦截器案件"背后一定还隐藏着某种设计动 ...

  3. Mybatis源码分析之(六)mybatis拦截器(Interceptor)的实现原理

    文章目录 前言 InterceptorChain保存所有的Interceptor 创建四大对象都走Configuration InterceptorChain增强对象方法 Plugin封装动态代理,让 ...

  4. 面试官:你能说说MyBatis拦截器原理吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Format cnblogs.com/fangjian042 ...

  5. Mybatis 拦截器原理

    mybatis拦截器(插件)原理 所谓的插件其实就是方法拦截器,mybatis四大组件(Executor,StatementHandler,ParameterHandler,ResultSetHand ...

  6. MyBatis拦截器原理探究MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...

  7. MyBatis拦截器有哪些以及分析

    MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允许你在已映射语句执行过程中 ...

  8. MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...

  9. MyBatis拦截器原理探究MyBatis拦截器原理探究 1

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...

最新文章

  1. 爱奇艺才被做空又爆裁员,技术研发为裁员重灾区
  2. Spring boot 实战 利用 Sharding-jdbc实现数据库的读写分离
  3. 深圳有哪些牛批的互联网公司?
  4. 算法---最长湍流子数组
  5. MySQL学习笔记之九:MySQL Replication
  6. mysql insert 失败_mysql insert语句出错
  7. 如何利用《C++ Primer》学习C++?
  8. 提取地图中道路_非机器学习方法·从遥感影像中提取道路
  9. OneNote使用说明
  10. Spring Bean的生命周期以及IOC源码解析
  11. Andorid提高--数据持久化
  12. AE快速动画脚本MotionMonkey
  13. 实验一 MATLAB数字图像处理基本操作
  14. win 2008无法远程桌面服务器,Windows 2008远程桌面无法连接的几个情况分析
  15. 打造敏捷的自组织团队
  16. MySQL微专业_网易微专业Java开发工程师
  17. win7看视频卡顿或声音画面不同步的解决步骤
  18. C++学习-Day-19
  19. 支付宝扫码支付-PC版(沙箱环境)
  20. java基础:面向对象编程23-this课后练习boygirl

热门文章

  1. OJDBC连接串配置
  2. 常年招聘!阿里达摩院-全职或实习
  3. CODING Compass —— 打造行云流水般的软件工厂
  4. uniapp 视频遮挡顶部导航
  5. MySQL图形界面软件-Navicat
  6. XGBoost 、逻辑回归、随机森林 模型实战对比
  7. 夫百千法门,同归方寸
  8. php百度坐标转腾讯坐标,火星坐标系、百度坐标系、腾讯坐标系的相互转换
  9. EtherNET IP通信
  10. java坦克大战代码脚本之家,javascript制作坦克大战全纪录(1)