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;
}