package cn.besteam.common.util; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.context.expression.MethodBasedEvaluationContext; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.expression.EvaluationContext; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import java.lang.reflect.Method; /** * @author chenqilong * @since 2019-05-21 */ public class SpringUtil { private static final ParameterNameDiscoverer NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); private static final ExpressionParser PARSER = new SpelExpressionParser(); public static String getSpelValue(ProceedingJoinPoint joinPoint, String definitionKey) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); return getSpelValue(definitionKey, method, joinPoint.getArgs()); } public static String getSpelValue(String definitionKey, Method method, Object[] parameterValues) { EvaluationContext context = new MethodBasedEvaluationContext(null, method, parameterValues, NAME_DISCOVERER); String val = PARSER.parseExpression(definitionKey).getValue(context).toString(); return val; } }