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)

 

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章