优化spel表达式解析工具类

pull/2/head
dark 2021-03-18 23:12:49 +08:00
parent 7f84e44e94
commit 27faa6153a
3 changed files with 43 additions and 7 deletions

View File

@ -13,7 +13,13 @@ import java.lang.annotation.*;
*/
public @interface BizTracing {
/**
* tag
*/
String BIZ_ID_TAG = "bizId";
/**
* tag
*/
String BIZ_TYPE_TAG = "bizType";
String bizId();

View File

@ -21,8 +21,8 @@ public class BizTracingAop {
@Around(value = "@annotation(bizTracing)")
public void tagBizInfo(ProceedingJoinPoint joinPoint, BizTracing bizTracing) {
String bizId = SpElUtil.analysisSpEl(bizTracing.bizId(), joinPoint);
String bizType = SpElUtil.analysisSpEl(bizTracing.bizType(), joinPoint);
String bizId = (String) SpElUtil.analysisSpEl(bizTracing.bizId(), joinPoint);
String bizType = (String) SpElUtil.analysisSpEl(bizTracing.bizType(), joinPoint);
if (StrUtil.isBlankIfStr(bizId)) {
log.error("empty biz: bizId[{}], bizType[{}].", bizId, bizType);
return;

View File

@ -9,15 +9,31 @@ import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* SpEl
*
* @author mashu
*/
public class SpElUtil {
private static SpelExpressionParser parser = new SpelExpressionParser();
private static DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
private SpElUtil() {
}
public static String analysisSpEl(String spElString, ProceedingJoinPoint joinPoint) {
SpelExpressionParser parser = new SpelExpressionParser();
DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
/**
* SpEL
*
* @param spElString
* @param joinPoint
* @return
*/
public static Object analysisSpEl(String spElString, ProceedingJoinPoint joinPoint) {
// 通过joinPoint获取被注解方法
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
@ -33,8 +49,22 @@ public class SpElUtil {
for (int i = 0; i < args.length; i++) {
context.setVariable(paramNames[i], args[i]);
}
Object value = expression.getValue(context);
return value == null ? "null" : value.toString();
return expression.getValue(context);
}
/**
* SpEL
*
* @param spElStrings
* @param joinPoint
* @return
*/
public static Map<String, Object> analysisSpEls(List<String> spElStrings, ProceedingJoinPoint joinPoint) {
if (null == spElStrings) {
return null;
}
Map<String, Object> resultMap = new HashMap<>(spElStrings.size());
spElStrings.forEach(expression -> resultMap.put(expression, analysisSpEl(expression, joinPoint)));
return resultMap;
}
}