springboot aop注意事项 防踩坑

  1. @Around 才有ProceedingJoinPoint ,且需要利用aop拦截方法时 只有ProceedingJoinPoint才会进入核心代码生效

  2. @Around 一定要return proceed 否则程序进入切面后终止在这里插入图片描述

  3. @AfterReturning 返回后通知中,

    •  如果参数中的第一个参数为JoinPoint,则第二个参数为返回值的信息
      
    •  如果参数中的第一个参数不为JoinPoint,则第一个参数为returning中对应的参数
      
    •   returning:限定了只有目标方法返回值与通知方法相应参数类型时才能执行后置返回通知,否则不执行(例如 注解所在方法 return string, 而returning 对应参数为JoinPoint jp ,Entity e)时 不会执行 )
      
    •   对于returning对应的通知方法参数为Object类型将匹配任何目标返回值
      
  4. 如果切面用来做日志记录等操作 切入注解应该在controller层 不要放在service层,否则切了个寂寞 要等日志插入数据库 接口才会返回

  5. 注解形式 aop写法

import org.aspectj.lang.annotation.*;

@Aspect
@Component
public class AopAspect {
    
    
	// 自定义注解 AopAnno
    @Pointcut("@annotation(com.boot.annotation.AopAnno)")
    public void doAround() {
    
    }
    // value为上面的方法名
     @Around(value = "doAround()")
    public Object addOper(ProceedingJoinPoint point) throws Throwable {
    
    
     	Object proceed = point.proceed();
     	// do something
     	return proceed;
    }
}

// 自定义注解类 注意一下ElementType就好了

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AopAnno {
    
    
   
}

Guess you like

Origin blog.csdn.net/qq_36268103/article/details/118420480