Mybatis 拦截器执行原理分析
目录
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 拦截器执行原理分析相关推荐
- 关于Mybatis拦截器的使用
关于Mybatis拦截器的使用 1 Mybatis拦截器的使用 1 自定义拦截器 1 Interceptor接口 2 @Intercepts注解 3 @Signature注解 2 注册拦截器 3 拦截 ...
- 犯罪心理解读Mybatis拦截器
原文链接:"犯罪心理"解读Mybatis拦截器 Mybatis拦截器执行过程解析 文章写过之后,我觉得 "Mybatis 拦截器案件"背后一定还隐藏着某种设计动 ...
- Mybatis源码分析之(六)mybatis拦截器(Interceptor)的实现原理
文章目录 前言 InterceptorChain保存所有的Interceptor 创建四大对象都走Configuration InterceptorChain增强对象方法 Plugin封装动态代理,让 ...
- 面试官:你能说说MyBatis拦截器原理吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Format cnblogs.com/fangjian042 ...
- Mybatis 拦截器原理
mybatis拦截器(插件)原理 所谓的插件其实就是方法拦截器,mybatis四大组件(Executor,StatementHandler,ParameterHandler,ResultSetHand ...
- MyBatis拦截器原理探究MyBatis拦截器原理探究
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...
- MyBatis拦截器有哪些以及分析
MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允许你在已映射语句执行过程中 ...
- MyBatis拦截器原理探究
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...
- MyBatis拦截器原理探究MyBatis拦截器原理探究 1
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...
最新文章
- 爱奇艺才被做空又爆裁员,技术研发为裁员重灾区
- Spring boot 实战 利用 Sharding-jdbc实现数据库的读写分离
- 深圳有哪些牛批的互联网公司?
- 算法---最长湍流子数组
- MySQL学习笔记之九:MySQL Replication
- mysql insert 失败_mysql insert语句出错
- 如何利用《C++ Primer》学习C++?
- 提取地图中道路_非机器学习方法·从遥感影像中提取道路
- OneNote使用说明
- Spring Bean的生命周期以及IOC源码解析
- Andorid提高--数据持久化
- AE快速动画脚本MotionMonkey
- 实验一 MATLAB数字图像处理基本操作
- win 2008无法远程桌面服务器,Windows 2008远程桌面无法连接的几个情况分析
- 打造敏捷的自组织团队
- MySQL微专业_网易微专业Java开发工程师
- win7看视频卡顿或声音画面不同步的解决步骤
- C++学习-Day-19
- 支付宝扫码支付-PC版(沙箱环境)
- java基础:面向对象编程23-this课后练习boygirl