简朴相识mybatis拦截器实现道理及实例
三个焦点要领都加了具体的注释,并且团结案例需求声名题目
那么多笔墨不想行看,不要紧有归纳综合 总结: 1.在mybatis中可被拦截的范例有四种(凭证拦截次序): Executor:拦截执行器的要领。 ParameterHandler:拦截参数的处理赏罚。 ResultHandler:拦截功效集的处理赏罚。 StatementHandler:拦截Sql语法构建的处理赏罚。 2.各个参数的寄义: @Intercepts:标识该类是一个拦截器; @Signature:指明自界说拦截器必要拦截哪一个范例,哪一个要领; 2.1 type:对应四种范例中的一种; 2.2 method:对应接口中的哪类要领(由于也许存在重载要领); 2.3 args:对应哪一个要领; 不知道可否辅佐你领略,我的表达手段有限~~~ 接下来我们看看 Plugin 类 package org.apache.ibatis.plugin; * Plugin 类着实就是一个署理类,由于它实现了jdk动态署理接口 InvocationHandler * 我们焦点只必要存眷两个要领 * wrap: * 假如看懂了代码案例1的例子,那么这个要领很领略,这个要领就是 mybatis 提供应开拓职员行使的一个器材类要领, * 目标就是辅佐开拓职员省略掉 反射理会注解 Intercepts 和 Signature,有乐趣的可以去看看源码 Plugin#getSignatureMap 要领 * invoke: * 这个要领就是按照 wrap 要领的理会功效,判定当前拦截器是否必要举办拦截, * 假如必要拦截:将 方针工具+方针要领+方针参数 封装成一个 Invocation 工具,给我们自界说的拦截器 MyInterceptor 的 intercept 要领 * 这个时辰就恰恰对应上了上面案例1中对 intercept 要领的表明白,它就是我们要处理赏罚本身逻辑的要领, * 处理赏罚好了之后是否必要挪用方针工具的要领,好比上面说的 打印了sql语句,是否还要查询数据库呢?谜底是必定的 * 假如不必要拦截:则直接挪用方针工具的要领 * 好比直接挪用 Executor 的 update 要领举办更新数据库 class Plugin implements InvocationHandler { public static Object wrap(Object target, Interceptor interceptor) { // 省略 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 省略 } 贴一段网上的通用表明吧: (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |