@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; }