zoukankan      html  css  js  c++  java
  • Spring boot AOP 实现Redis 存储

    package com.carloan.common.web.annotation;
    
    import java.lang.annotation.*;
    
    /**
     * 自定义redis缓存注解、只要在service上添加该注解。数据第一次访问都会加载到redis里
     *
     *
     *
     * @author 周志伟
     *
     *
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RedisCache {
        /**
         *  SYS  系统级别
         *  INFO 业务级别
         * @return
         */
        String type() default "SYS";
    }
    package com.carloan.common.web.aspect;
    
    import com.carloan.common.redisTemplate.service.RedisUtils;
    import com.carloan.common.utils.SpringUtil;
    import com.carloan.common.web.annotation.RedisCache;
    import org.apache.commons.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.springframework.stereotype.Component;
    
    import java.lang.reflect.Method;
    
    /**
     * @author 周志伟
     * @projectname 项目名称: ${project_name}
     * @classname: RedisAspect
     * @description:
     *
     * 定义redis缓存AOP
     *
     * @date 2018/7/18:16:44
     */
    @Component
    @Aspect
    public 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("com.carloan.common.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();
        }
    
    
    }

     调用

  • 相关阅读:
    VS2012程序打包部署详解
    C# 实现客户端程序自动更新
    C# dev gridcontrol中添加checkbox复选框
    sql server 修改表结构
    sql server 日期转换函数 convert()
    C# devExpress BandedGridView属性 备忘
    sql server 行转列 Pivot UnPivot
    c# 动态产生控件 注册动态控件事件
    阿里云镜像
    git 拉去代码要求密码 解决方法:生成gitLab公钥
  • 原文地址:https://www.cnblogs.com/yy123/p/9358501.html
Copyright © 2011-2022 走看看