• myBatis插件(plugins)


    MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

    • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    • ParameterHandler (getParameterObject, setParameters)
    • ResultSetHandler (handleResultSets, handleOutputParameters)
    • StatementHandler (prepare, parameterize, batch, update, query)

    通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定了想要拦截的方法签名即可。

    plugins能在四大组件执行时进行进一步干扰:

    // ExamplePlugin.java
    @Intercepts({@Signature(
      type= Executor.class,
      method = "update",
      args = {MappedStatement.class,Object.class})})
    public class ExamplePlugin implements Interceptor {
      public Object intercept(Invocation invocation) throws Throwable {
        return invocation.proceed();
      }
      public Object plugin(Object target) {
        return Plugin.wrap(target, this);
      }
      public void setProperties(Properties properties) {
      }
    }
    <!-- mybatis-config.xml -->
    <plugins>
      <plugin interceptor="org.mybatis.example.ExamplePlugin">
        <property name="someProperty" value="100"/>
      </plugin>
    </plugins>

    plugin进行包装,按照签名的标识创建代理对象。---->进入Interceptor(可以对类中的方法进行拦截处理)

    //创建一个动态代理对象来包装正在拦截的四大对象的某个对象
    //创建一个代理对象的实现
    //不是目标对象不会创建代理对象

     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));//符合的就创建代理对象
        }
  • 相关阅读:
    在Linux环境docker推送镜像到harbor仓库
    MySQL使用load加载数据到table
    Mysql插入数据来源另一张表
    mysql清空表
    supervisor使用
    curl命令查看请求响应时间
    mysql 在insert时防止出现主键冲突错误的方法
    两个Date类型计算时间差
    SpringCloud学习案例讲解
    minit数据集及手写BP网络及梯度求导
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7426101.html
Copyright © 2020-2023  润新知