• AOP中5种通知的注解


    Spring AOP(基于代理的AOP)中,有五种常用的通知注解,用于定义切面中的通知行为。这些通知注解分别用于不同的通知类型,包括前置通知、后置通知、环绕通知、异常通知和最终通知。以下是这五种通知注解的详细说明:

    1. 前置通知(@Before)

      • @Before 注解用于定义前置通知,在目标方法执行之前执行。
      • 前置通知方法可以包含在切面中,并在目标方法执行之前执行一些逻辑,例如日志记录、权限检查等。
      @Before("execution(* com.example.service.MyService.*(..))")
      public void beforeAdvice() {
          // 前置通知逻辑
      }
      
      • 1
      • 2
      • 3
      • 4
    2. 后置通知(@AfterReturning)

      • @AfterReturning 注解用于定义后置通知,在目标方法成功执行后执行
      • 后置通知方法可以包含在切面中,用于处理目标方法的返回值或执行一些清理工作。
      @AfterReturning(pointcut = "execution(* com.example.service.MyService.*(..))", returning = "result")
      public void afterReturningAdvice(Object result) {
          // 后置通知逻辑,可以访问目标方法的返回值(result)
      }
      
      • 1
      • 2
      • 3
      • 4
    3. 环绕通知(@Around)

      • @Around 注解用于定义环绕通知,它能够完全控制目标方法的执行过程,包括在方法执行前后进行操作。
      • 环绕通知方法必须接受一个 ProceedingJoinPoint 参数,用于控制目标方法的执行。
      @Around("execution(* com.example.service.MyService.*(..))")
      public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
          // 环绕通知逻辑(前置操作)
          Object result = joinPoint.proceed(); // 执行目标方法
          // 环绕通知逻辑(后置操作)
          return result;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    4. 异常通知(@AfterThrowing)

      • @AfterThrowing 注解用于定义异常通知,在目标方法抛出异常时执行。
      • 异常通知方法可以处理目标方法抛出的异常或执行其他处理逻辑。
      @AfterThrowing(pointcut = "execution(* com.example.service.MyService.*(..))", throwing = "exception")
      public void afterThrowingAdvice(Exception exception) {
          // 异常通知逻辑,可以访问目标方法抛出的异常
      }
      
      • 1
      • 2
      • 3
      • 4
    5. 最终通知(@After)

      • @After 注解用于定义最终通知,它在目标方法执行完成(无论是否成功)后执行。
      • 最终通知方法可以用于执行清理工作,例如释放资源或记录日志。
      @After("execution(* com.example.service.MyService.*(..))")
      public void afterAdvice() {
          // 最终通知逻辑
      }
      
      • 1
      • 2
      • 3
      • 4

    这些通知注解可以用于定义切面中的各种通知类型,以实现不同的横切关注点。通常,你可以根据需求选择其中一个或多个通知类型来编写切面。

  • 相关阅读:
    Ms08067安全实验室成功实施多家业务系统渗透测试项目
    【PyTorch实战】用RNN写诗
    如何快速调整SMT贴片编程中的特殊元件角度?
    兼容低版本浏览器方法 Babel
    Linux Find命令详解(图片版)
    ElasticSearch (ES)学习之路(六)Springboot2.3.1整合ES 7.6.1
    Delaunay三角网之逐点插入法(优化版本三)
    就在刚刚 Kubernetes 1.25 正式发布,包括这些重大变化
    Hydra参数
    Shell编程之定时任务
  • 原文地址:https://blog.csdn.net/m0_72014660/article/details/133745042