SpringBoot AOP 自定义日志拦截注解

2018-09-20  本文已影响128人  赛亚人之神

切面

@Slf4j
@Configuration
@Aspect
public class OpsLogAspect {

  @Pointcut(value = "@annotation(com.magic.platform.core.anotation.OpsLog)")
  public void opsLogAnnotation() {}


  @AfterReturning(pointcut = "opsLogAnnotation()", returning = "object")
  public void doAfterReturning(JoinPoint joinPoint, Object object) {

    // 获取方法的签名
    MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();

    Method method = methodSignature.getMethod();
    OpsLog opsLog = method.getAnnotation(OpsLog.class);

    String value = opsLog.value();

    OpsLogType[] opsLogTypes = opsLog.type();
    String opsLogTypeName = null;
    if (opsLogTypes.length > 0) {
      opsLogTypeName = opsLogTypes[0].name();
    }
    log.warn("执行的操作:{}, 类型:{}", value, opsLogTypeName);

  }
}

日志注解

@Documented // 定义注解的保留策略
@Inherited //说明子类可以继承父类中的该注解
@Retention(value = RetentionPolicy.RUNTIME) // 定义注解的保留策略
@Target(value = {ElementType.METHOD}) // 定义注解的作用目标
public @interface OpsLog {

  String value() default "";
  OpsLogType[] type() default {};
}

操作类型

public enum OpsLogType {
  /**
   * 添加
   */
  ADD,

  /**
   * 修改
   */
  UPDATE,

  /**
   * 删除
   */
  DELETE,

  /**
   * 查询
   */
  SELECT,

  /**
   * 设置
   */
  SET,

  /**
   * 重置
   */
  RESET,

  /**
   * 停用
   */
  STOP,

  /**
   * 上传
   */
  UPLOAD,

  /**
   * 下载
   */
  DOWNLOAD;
}
上一篇下一篇

猜你喜欢

热点阅读