com.codingapi.tx.aop.service.impl.AspectBeforeServiceImpl Maven / Gradle / Ivy
package com.codingapi.tx.aop.service.impl;
import com.codingapi.tx.annotation.TxTransaction;
import com.codingapi.tx.aop.bean.TxTransactionInfo;
import com.codingapi.tx.aop.bean.TxTransactionLocal;
import com.codingapi.tx.aop.service.AspectBeforeService;
import com.codingapi.tx.aop.service.TransactionServer;
import com.codingapi.tx.aop.service.TransactionServerFactoryService;
import com.codingapi.tx.model.TransactionInvocation;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
/**
* Created by lorne on 2017/7/1.
*/
@Service
public class AspectBeforeServiceImpl implements AspectBeforeService {
@Autowired
private TransactionServerFactoryService transactionServerFactoryService;
private Logger logger = LoggerFactory.getLogger(AspectBeforeServiceImpl.class);
public Object around(String groupId,int maxTimeOut, ProceedingJoinPoint point) throws Throwable {
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
Class> clazz = point.getTarget().getClass();
Object[] args = point.getArgs();
Method thisMethod = clazz.getMethod(method.getName(), method.getParameterTypes());
TxTransaction transaction = thisMethod.getAnnotation(TxTransaction.class);
TxTransactionLocal txTransactionLocal = TxTransactionLocal.current();
logger.info("around--> groupId-> " +groupId+",txTransactionLocal->"+txTransactionLocal);
TransactionInvocation invocation = new TransactionInvocation(clazz, thisMethod.getName(), thisMethod.toString(), args, method.getParameterTypes());
TxTransactionInfo info = new TxTransactionInfo(transaction,txTransactionLocal,invocation,groupId,maxTimeOut);
TransactionServer server = transactionServerFactoryService.createTransactionServer(info);
return server.execute(point, info);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy