SpringBoot中切面的用法

记录一下我在springBoot中用到的切面方法

环绕切面

目前我用到的环绕切,有三种

  1. 第一种方法

    /**
     * 根据方法签名进行切面
     */
    @Around("execution(public * com.example.springboot.web.controller.*.*(..))")
    public Object fun1(ProceedingJoinPoint point) throws Throwable {
        // ...(方法执行前的逻辑)
        Object result = point.proceed();
        // ...(方法执行后的逻辑)
        return result; // or return null;
    }
    
  2. 第二种方法

    /**
     * 根据注解进行切面,不获取注解实例
     */
    @Around("@annotation(com.example.springboot.MyAnnotation)")
    public Object fun2(ProceedingJoinPoint point) throws Throwable {
        // ...(方法执行前的逻辑)
        Object result = point.proceed();
        // ...(方法执行后的逻辑)
        return result;
    }
    
  3. 第三种方法

    /**
     * 根据注解进行切面,同时获取注解示例
     * @param myAnnotation 切点的注解示例,可以从注解中拿到切点注解的配置
     */
    @Around("@annotation(myAnnotation)")
    public Object fun3(ProceedingJoinPoint point, MyAnnotation myAnnotation) throws Throwable {
        // ...(方法执行前的逻辑)
        Object result = point.proceed();
        // ...(方法执行后的逻辑)
        return result; // or return null;
    }
    

后置切面

目前只用到一种

/**
 * 后置切面,同时获取方法执行结果
 * @param result 就是切点方法的执行结果
 */
@AfterReturning(
    value = "execution(public * com.example.springboot.web.controller.*.*(..))", 
    returning = "result"
)
public Object fun4(JoinPoint point, Object result) throws Throwable {
    // ...(方法执行后的逻辑)
    return result; // or return null;
}

你可能感兴趣的:(SpringBoot中切面的用法)