记录使用aop环绕通知获取Log注解中的参数

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里拿到注解上的参数,如下:
在这里插入图片描述
暂时觉得这样做好像并不能很好的来记录日志,因为记录日志一般都需要记录操作人的信息,在切面中好像无法获当前操作人的信息,先记录一下,万一以后用的上。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring AOP环绕通知(Around Advice)是一种在目标方法执行前后都可以执行的通知类型。它可以完全控制目标方法的执行过程,包括在目标方法执行前、执行后、抛出异常时执行的逻辑。 环绕通知使用@Around注解来定义,需要在切面(Aspect)类的方法上添加该注解。方法的参数可以包括ProceedingJoinPoint类型的参数,用于控制目标方法的执行。在环绕通知,我们需要手动调用ProceedingJoinPoint的proceed()方法来触发目标方法的执行。 下面是一个简单的示例: ```java @Aspect @Component public class LoggingAspect { @Around("execution(* com.example.service.*.*(..))") public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable { // 在目标方法执行前执行的逻辑 System.out.println("Before method: " + joinPoint.getSignature().getName()); // 执行目标方法 Object result = joinPoint.proceed(); // 在目标方法执行后执行的逻辑 System.out.println("After method: " + joinPoint.getSignature().getName()); return result; } } ``` 在上述示例,@Around注解定义了一个环绕通知方法logMethod,它会拦截com.example.service包下所有类的所有方法。在方法体,我们可以根据需要编写目标方法执行前、执行后的逻辑,并通过proceed()方法来触发目标方法的执行。最后,我们可以通过return语句返回目标方法的返回值。 需要注意的是,环绕通知的proceed()方法必须被调用,否则目标方法将不会被执行。同时,环绕通知方法的返回值必须与目标方法的返回值类型一致。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值