spring之aop整理

好久不怎么用,今天整理一下

 

前置通知 @Before 目标方法执行之前

后置通知 @After  目标方法执行后,不管目标方法执行是否异常,该方法都会执行

返回通知 @AfterReturning 返回通知是可以访问到方法的返回值的 result

异常通知 @AfterThrowing 在目标方法出现异常时会执行

环绕通知 环绕通知类似于动态代理的全过程 必须有返回值, 返回值即为目标方法的返回值

 

 

执行顺序:

   正常:

       

 

   异常:

       

 

 

 

@Aspect  

public class TestAnnotationAspect {  

  

    @Pointcut("execution(* com.spring.service.*.*(..))")  

    private void pointCutMethod() {  

    }  

  

    //声明前置通知  目标方法执行之前

    @Before("pointCutMethod()")  

    public void doBefore(JoinPoint joinPoint) {  

        String methodName = joinPoint.getSignature().getName();

        System.out.println("前置通知");  

    }

 

    //声明后置通知  目标方法执行后,不管目标方法执行是否异常,该方法都会执行

    @After("pointCutMethod()")  

    public void doAfter(JoinPoint joinPoint) {  

        System.out.println("后置通知");  

    }  

  

    //声明返回通知  返回通知是可以访问到方法的返回值的 result

    @AfterReturning(value = "pointCutMethod()", returning = "result")  

    public void doAfterReturning(JoinPoint joinPoint,Object result) {  

        System.out.println("返回通知");  

        System.out.println("---" + result + "---");  

    }  

  

    //声明异常通知  在目标方法出现异常时会执行

    @AfterThrowing(value = "pointCutMethod()", throwing = "e")  

    public void doAfterThrowing(JoinPoint joinPoint,Exception e) {  

        System.out.println("异常通知");  

        System.out.println(e.getMessage());  

    }  

  

   

  

    /**

     * 环绕通知需要携带 ProceedingJoinPoint 类型的参数. 

     * 环绕通知类似于动态代理的全过程: ProceedingJoinPoint 类型的参数可以决定是否执行目标方法.

      * 且环绕通知必须有返回值, 返回值即为目标方法的返回值

      */

/*

@Around("pointCutMethod()")

public Object aroundMethod(ProceedingJoinPoint pjd){

 

   Object result = null;

   String methodName = pjd.getSignature().getName();

 

   try {

       //前置通知

      System.out.println("The method " + methodName + " begins with " + Arrays.asList(pjd.getArgs()));

      //执行目标方法

      result = pjd.proceed();

      //返回通知

      System.out.println("The method " + methodName + " ends with " + result);

   } catch (Throwable e) {

       //异常通知

       System.out.println("The method " + methodName + " occurs exception:" + e);

       throw new RuntimeException(e);

    }

   //后置通知

   System.out.println("The method " + methodName + " ends");

 

   return result;

}

*/ 

}  

 

 

/**

 *这个注解可以指定切面的优先级  越小优先级越高

 *

 */

@Order(1)

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值