spring学习笔记(17)——返回通知&异常通知&环绕通知

迷南。 2022-08-08 06:24 352阅读 0赞

本人接上篇spring学习笔记(16)——AOP之前后置通知

返回通知

  1. /** * 返回通知: 方法正常执行完后调用,如果有异常,则不调用 * 可以访问到方法的返回值 * @param joinPoint * @param result 方法的返回值 */
  2. @AfterReturning(value="execution(* com.zj.asceptj.*.*(..))",returning="result")
  3. public void afterReturning(JoinPoint joinPoint,Object result){
  4. //方法名
  5. String methodName = joinPoint.getSignature().getName();
  6. System.out.println("method "+methodName+" end:"+result);
  7. }

异常通知

  1. /** * 异常通知: 当方法出现异常时 * 可以指定出现哪些异常时才执行: 如何指定?通过入参指定,如: * 如果入参为NullPointException ex,那么只有在发生空指针异常时才执行 * @param joinPoint * @param ex */
  2. @AfterThrowing(value="execution(* com.zj.asceptj.*.*(..))",throwing="ex")
  3. public void afterThrowing(JoinPoint joinPoint,Exception ex){
  4. //方法名
  5. String methodName = joinPoint.getSignature().getName();
  6. System.out.println("method "+methodName+" occurs:"+ex);
  7. }

环绕通知

  • 环绕通知类似于动态代理的全过程,可以使用环绕通知实现前置通知,后置通知,返回通知,异常通知的功能,十分强大,但并不常用
  • 关于动态代理,请查看spring学习笔记(15)——AOP基础

    /* 环绕通知需要携带ProceedingJoinPoint类型的参数 环绕通知类似于动态代理的全过程: ProceedingJoinPoint这个类型的参数可以决定是否执行目标方法 且环绕通知必须有返回值,返回值即为目标方法的返回值 @param pjd /

    1. @Around("execution(* com.zj.asceptj.*.*(..))")
    2. public Object around(ProceedingJoinPoint pjd){
    3. Object result = null;
    4. String methodName = pjd.getSignature().getName();
    5. try {
    6. //前置通知
    7. System.out.println("method:"+methodName+" begins with "+Arrays.asList(pjd.getArgs()));
    8. //执行目标方法
    9. result = pjd.proceed();
    10. //返回通知
    11. System.out.println("method:"+methodName+" end with "+result);
    12. } catch (Throwable e) {
    13. // 异常通知
    14. System.out.println("method:"+methodName+" occurs exception "+e);
    15. }
    16. //后置通知
    17. System.out.println("method ends");
    18. return result;
    19. }

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring-环绕通知 @Around 注解

    > 环绕通知:常用于做事务,事务开启,执行方法。在目标方法执行之前之后执行。 > 被注解为环绕增强的方法要有返回值,Object类型。并且方法可以包含一个Proceedin