package cn.lili.common.utils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; /** * SpelUtil * * @author Chopper * @version v1.0 * 2021-01-11 10:45 */ public class SpelUtil { /** * spel表达式解析器 */ private static SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); /** * 参数名发现器 */ private static DefaultParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); /** * 转换 jspl参数 * * @param joinPoint * @param spel * @return */ public static String compileParams(JoinPoint joinPoint, String spel) { //Spel表达式解析日志信息 //获得方法参数名数组 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); String[] parameterNames = parameterNameDiscoverer.getParameterNames(signature.getMethod()); if (parameterNames != null && parameterNames.length > 0) { EvaluationContext context = new StandardEvaluationContext(); //获取方法参数值 Object[] args = joinPoint.getArgs(); for (int i = 0; i < args.length; i++) { //替换spel里的变量值为实际值, 比如 #user --> user对象 context.setVariable(parameterNames[i], args[i]); } return spelExpressionParser.parseExpression(spel).getValue(context).toString(); } return ""; } /** * 转换 jspl参数 * * @param joinPoint * @param spel * @return */ public static String compileParams(JoinPoint joinPoint, Object rvt, String spel) { //Spel表达式解析日志信息 //获得方法参数名数组 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); String[] parameterNames = parameterNameDiscoverer.getParameterNames(signature.getMethod()); if (parameterNames != null && parameterNames.length > 0) { EvaluationContext context = new StandardEvaluationContext(); //获取方法参数值 Object[] args = joinPoint.getArgs(); for (int i = 0; i < args.length; i++) { //替换spel里的变量值为实际值, 比如 #user --> user对象 context.setVariable(parameterNames[i], args[i]); } context.setVariable("rvt", rvt); return spelExpressionParser.parseExpression(spel).getValue(context).toString(); } return ""; } }