失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Spring boot AOP 实现Redis 存储

Spring boot AOP 实现Redis 存储

时间:2023-06-04 11:57:23

相关推荐

Spring boot AOP 实现Redis 存储

package mon.web.annotation;import java.lang.annotation.*;/*** 自定义redis缓存注解、只要在service上添加该注解。数据第一次访问都会加载到redis里**** @author 周志伟***/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RedisCache {/*** SYS 系统级别* INFO 业务级别* @return*/String type() default "SYS";}

package mon.web.aspect;import mon.redisTemplate.service.RedisUtils;import mon.utils.SpringUtil;import mon.web.annotation.RedisCache;import mons.lang3.StringUtils;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.Signature;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.reflect.MethodSignature;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.ponent;import java.lang.reflect.Method;/*** @author 周志伟* @projectname 项目名称: ${project_name}* @classname: RedisAspect* @description:** 定义redis缓存AOP** @date /7/18:16:44*/@Component@Aspectpublic class RedisAspect {Logger logger = LoggerFactory.getLogger(RedisAspect.class);@Around("@annotation(redisCache)")public Object doValid(ProceedingJoinPoint joinPoint, RedisCache redisCache) throws Throwable {RedisUtils redisUtils=(RedisUtils) SpringUtil.getObject("mon.redisTemplate.service.RedisUtils");Object object=null;String key=this.getKey(redisCache.type(),joinPoint);try {if (!redisUtils.exists(key)) {object = joinPoint.proceed();redisUtils.set(key, object);logger.info("插入redis缓存OK---方法名称{},redis--key{}",joinPoint.getSignature().getName(),key);} else {object = redisUtils.get(key);logger.info("获取redis缓存OK---方法名称{},redis--key{}",joinPoint.getSignature().getName(),key);}}catch (Exception e){object = joinPoint.proceed();logger.info("执行异常-RedisAspect---方法名称{0},redis--key{}",joinPoint.getSignature().getName(),key);e.printStackTrace();}return object ;}public String getKey(String type,ProceedingJoinPoint point) throws NoSuchMethodException {StringBuffer sb = new StringBuffer();Object[] arguments = point.getArgs();Signature sig = point.getSignature();MethodSignature msig = null;msig = (MethodSignature) sig;Object target = point.getTarget();Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());String methodName = currentMethod.getName();String className = point.getTarget().getClass().getName();sb.append(type).append(":").append(className).append(":").append(methodName);if (arguments != null && arguments.length != 0) {for (Object a : arguments) {sb.append(":").append(StringUtils.substringBefore(a.toString(),"@"));}}return sb.toString();}}

调用

如果觉得《Spring boot AOP 实现Redis 存储》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。