插件原理:在四大对象创建的时候
1、每个创建出来的对象不是直接返回的,而是
interceptorChain.pluginAll(parameterHandler);
2、获取到所有的Interceptor(拦截器)(插件需要实现的接口);
调用interceptor.plugin(target);返回target包装后的对象
3、插件机制,我们可以使用插件为目标对象创建一个代理对象;AOP(面向切面)
我们的插件可以为四大对象创建出代理对象;
代理对象就可以拦截到四大对象的每一个执行;
编写插件
1、创建插件类实现interceptor接口并且使用注解标注拦截对象与方法
package city.albert;
/**
* @author niunafei
* @function
* @email niunafei0315@163.com
* @date 2020/6/11 6:08 PM
*/
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* 注解声明mybatis当前插件拦截哪个对象的哪个方法
* <p>
* type表示要拦截的