package org.jeecg.config.mybatis.aspect;
|
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Pointcut;
|
import org.aspectj.lang.reflect.MethodSignature;
|
import org.jeecg.common.aspect.annotation.DynamicTable;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.util.SpringContextUtils;
|
import org.jeecg.config.mybatis.ThreadLocalDataHelper;
|
import org.springframework.stereotype.Component;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.lang.reflect.Method;
|
|
/**
|
* 动态table切换 切面处理
|
*
|
* @author :zyf
|
* @date:2020-04-25
|
*/
|
@Aspect
|
@Component
|
public class DynamicTableAspect {
|
|
|
/**
|
* 定义切面拦截切入点
|
*/
|
@Pointcut("@annotation(org.jeecg.common.aspect.annotation.DynamicTable)")
|
public void dynamicTable() {
|
}
|
|
|
@Around("dynamicTable()")
|
public Object around(ProceedingJoinPoint point) throws Throwable {
|
MethodSignature signature = (MethodSignature) point.getSignature();
|
Method method = signature.getMethod();
|
DynamicTable dynamicTable = method.getAnnotation(DynamicTable.class);
|
HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
|
//获取前端传递的版本标记
|
String version = request.getHeader(CommonConstant.VERSION);
|
//存储版本号到本地线程变量
|
ThreadLocalDataHelper.put(CommonConstant.VERSION, version);
|
//存储表名到本地线程变量
|
ThreadLocalDataHelper.put(CommonConstant.DYNAMIC_TABLE_NAME, dynamicTable.value());
|
//执行方法
|
Object result = point.proceed();
|
//清空本地变量
|
ThreadLocalDataHelper.clear();
|
return result;
|
}
|
|
}
|