1、建立Log注解类,代码如下:
//表示作用于方法上
@Target(ElementType.METHOD)
//编辑时、编译后该注解可以用
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
//方法简单介绍
String value() default "";
//方法名称
String name() default "";
}
2、编写切面类,代码如下:
/**
* aop切面类
*
* @Author: ljp
* @CreateDate: 2021/3/15 16:48
*/
@Aspect
@Component
public class LogAspect {
@Pointcut("@annotation(com.example.annotaionlogdemo.annotation.Log)")
public void pointcut() {
}
/**
* 通过环绕通知获取到注释上的信息
*
* @param proceedingJoinPoint
* @throws NoSuchMethodException
*/
@Around("pointcut()")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws NoSuchMethodException {
//1. 通过连接点获取方法签名 被切入方法的所有信息
MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
//2.获取被切入方法对象
Method method = signature.getMethod();
//3.获取方法上的注解
Log log = method.getAnnotation(Log.class);
//4.获取注解的值
System.out.println("接口的简单介绍:" + log.value());
System.out.println("接口的名称" + log.name());
}
}
3、编写测试接口
@Log(value = "测试接口", name = "test")
@GetMapping("/test")
public Object test() {
return null;
}
接口调用后,会在aop里拿到注解上的参数,如下:
暂时觉得这样做好像并不能很好的来记录日志,因为记录日志一般都需要记录操作人的信息,在切面中好像无法获当前操作人的信息,先记录一下,万一以后用的上。