package org.jeecg.boot.starter.lock.aspect; import lombok.extern.slf4j.Slf4j; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; import java.util.ArrayList; import java.util.List; /** * @author zyf */ @Slf4j public class BaseAspect { /** * 通过spring SpEL 获取参数 * * @param key 定义的key值 以#开头 例如:#user * @param parameterNames 形参 * @param values 形参值 * @param keyConstant key的常亮 * @return */ public List getValueBySpEL(String key, String[] parameterNames, Object[] values, String keyConstant) { List keys = new ArrayList<>(); if (!key.contains("#")) { String s = "redis:lock:" + key + keyConstant; log.info("lockKey:" + s); keys.add(s); return keys; } //spel解析器 ExpressionParser parser = new SpelExpressionParser(); //spel上下文 EvaluationContext context = new StandardEvaluationContext(); for (int i = 0; i < parameterNames.length; i++) { context.setVariable(parameterNames[i], values[i]); } Expression expression = parser.parseExpression(key); Object value = expression.getValue(context); if (value != null) { if (value instanceof List) { List value1 = (List) value; for (Object o : value1) { addKeys(keys, o, keyConstant); } } else if (value.getClass().isArray()) { Object[] obj = (Object[]) value; for (Object o : obj) { addKeys(keys, o, keyConstant); } } else { addKeys(keys, value, keyConstant); } } log.info("表达式key={},value={}", key, keys); return keys; } private void addKeys(List keys, Object o, String keyConstant) { keys.add("redis:lock:" + o.toString() + keyConstant); } }