SpringAOP拦截器

  • 声明一个AOP拦截器需要在当前对象上面添加@Aspect @Component注解,看了 Aspect 注解的定义就可以知道,它里面没有Bean的定义。
  • 使用的时候需要配置类上增加@EnableAspectJAutoProxy 注解。
  • 执行方法的顺序
    Around_a->Before->目标方法->AfterReturning->After->Around_b
  • 使用Aop的步骤
    1. 定义 Aspect 定义切面
    2. 定义 Pointcut 就是定义我们切入点
    3. 定义具体通知
@Aspect
@Component
public class MyAspect {

   @Pointcut("execution(* com.springboot.controller..*.*(..))")
   public void cutPoint() {
       //@Pointcut 定义切入点
   }


   @Before("cutPoint()")
   public void aopBefore() {
       //@Before 前置通知:目标方法之前执行
       System.out.println("Before");
   }

   @After("cutPoint()")
   public void aopAfter() {
       //@After 后置通知:目标方法之后执行(始终执行)
       System.out.println("After");
   }

   @AfterReturning("cutPoint()")
   public void aopAfterReturn() {
       //@AfterReturning 返回之后通知:执行方法结束之前执行(异常不执行)
       System.out.println("AfterReturning");
   }

   @AfterThrowing("cutPoint()")
   public void aopAfterThrowing() {
       //@AfterThrowing 异常通知:出香异常后执行
       System.out.println("AfterThrowing");
   }

   @Around("cutPoint()")
   public Object divAround(ProceedingJoinPoint point) throws Throwable {
       //@Around 环绕通知:环绕目标方法执行
       System.out.println("Around_a");
       Object proceed = point.proceed();
       System.out.println("Around_b");
       return proceed;
   }
}

posted @ 2022-03-17 11:46  meng_zhao  阅读(503)  评论(0编辑  收藏  举报