code: public T getObject() throws Exception {
      final T mapper = getSqlSession().getMapper(this.mapperInterface);
  
      return Reflection.newProxy(this.mapperInterface, new InvocationHandler() {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          long start = System.currentTimeMillis();
          TraceContext rpc = TraceContext.get();
          String parameters = getParameters(args);
          String iface = MapperFactoryBean.this.iface;
          rpc.reset().inc().setStamp(start).setIface(iface).setMethod(method.getName()).setParameter(parameters);
          try {
            return method.invoke(mapper, args);
          } catch (Exception e) {
            rpc.setFail(true).setReason(e.getMessage());
            LOG.error("{}.{}({})", iface, method.getName(), parameters, e);
            throw e;
          } finally {
            rpc.setCost(System.currentTimeMillis() - start);
            TraceRecorder.getInstance().post(rpc.copy());
          }
        }
      });
    }
docs: {@inheritDoc}