MyBatis 插件原理与自定义插件-用代理模式我们就要解决几个问题

1) 有哪些对象允许被代理?有哪些方法可以被拦截?

我们应该了解MyBatis 允许哪些对象的哪些方法允许被拦截,并不是每一个运行的节点都是可以被修改的。只有清楚了这些对象的方法的作用,当我们自己编写插件的时候才知道从哪里去拦截。

在MyBatis 官网有答案,我们来看一下:

http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins

Executor 会拦截到CachingExcecutor 或者BaseExecutor。

因为创建Executor 时是先创建Executor,再拦截。

2) 怎么样创建代理?

如果我们用JDK 的动态代理,要有一个实现了InvocationHandler 的代理类,用来包装被代理对象,这个类是我们自己创建还是谁来创建?

3) 什么时候创建代理对象?是在MyBatis 启动的时候创建,还是调用的时候创建?

4) 被代理后,调用的是什么方法?怎么调用到原被代理对象的方法(比如Executor 的query()方法)?

要解决后面三个问题,我们先看一下别人的插件是怎么工作的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值