切面类:
RedisCacheAspect.java
/**
-
@author: Administrator
*/
@Component
@Aspect
public class RedisCacheAspect {@Autowired
private RedisUtil redisUtil;private static final ExpressionParser parser = new SpelExpressionParser();
/**
-
插入缓存
-
@param joinPoint
-
@param redisCache
*/
@Before("@annotation(redisCache)")
public void insertCache(JoinPoint joinPoint,RedisCache redisCache){
// 获取参数
Object[] args = joinPoint.getArgs();// 获取参数名字
MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
String[] parameterNames = methodSignature.getParameterNames();
// 获取 EvaluationContext
StandardEvaluationContext evaluationContext = getEvaluationContext(parameterNames, args);
// 获取 redis 存储 key
if(!redisCache.batch()){
String cacheKey = redisCache.cacheKey();
String cacheValue = redisCache.cacheValue();
// 解析 redis key
Expression keyExpression = parser.parseExpression(cacheKey,ParserContext.TEMPLATE_EXPRESSION);
String key = keyExpression.getValue(evaluationContext, String.class);// 解析 值 Expression valueExpression = parser.parseExpression(cacheValue); Object value = valueExpression.getValue(evaluationContext); // 存入 缓存 redisUtil.setKey(key,value);
}else{
// 获取 迭代对象
String batchValue = redisCache.cacheValue();
String itemName = redisCache.itemName();
String cacheKey = redisCache.cacheKey();
Iterable value = parser.parseExpression(batchValue).getValue(evaluationContext, Iterable.class);
// 迭代生成 缓存
for(Object it: value){
evaluationContext.setVariable(itemName,it);
// 解析 key
String redisCacheKey = parser.parseExpression(cacheKey,ParserContext.TEMPLATE_EXPRESSION).getValue(evaluationContext, String.class);
redisUtil.setKey(redisCacheKey,it);
}
}
}
public StandardEvaluationContext getEvaluationContext(String[] parameterNames,Object[] args){
StandardEvaluationContext context = new StandardEvaluationContext();
for(int i = 0; i< parameterNames.length ; i++){
// 设置参数
context.setVariable(parameterNames[i],args[i]);
}
return context;
}
} -