@Override
  public Object invoke(MethodInvocation methodInvocation) throws Throwable {
    log.debug("[IbatisLocalTransactionInterceptor]进入=》" + methodInvocation.getMethod().getName());
    SqlMapClientHolder sqlMapClientHolder =
        GuiceContext.getInstance().getBean(SqlMapClientHolder.class);

    Method method = methodInvocation.getMethod();
    Transactional transactional = method.getAnnotation(Transactional.class);
    if (transactional == null) {
      transactional = method.getDeclaringClass().getAnnotation(Transactional.class);
    }

    TransactionalType type = transactional.type();

    IbatisTransaction transaction = sqlMapClientHolder.getIbatisTransaction();

    if (transaction.isActive()) {
      return methodInvocation.proceed();
    }

    // 开始一个新的事务
    if (type != TransactionalType.READOLNY) {
      transaction.begin();
    }

    Object result = null;
    try {
      // 执行被拦截的业务方法
      result = methodInvocation.proceed();
      // 提交事务
      if (type != TransactionalType.READOLNY && transaction.isActive()) {
        transaction.commit();
      }
    } catch (Exception e) {
      throw e;
    }

    log.debug("[IbatisLocalTransactionInterceptor]离开=》" + methodInvocation.getMethod().getName());

    // 返回业务方法的执行结果
    return result;
  }