2016-03-18 23 views
1

是正常的,再扔,一些動作後,來自各地的方面的例外ExceptionHandler休息控制器,就像這樣:重新扔在@Around方面的異常

@Around("execution(* *(..)) && @annotation(someAnnotation)") 
public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable { 
    //some action 
    try { 
     result = point.proceed(); 
    } catch (Exception e) { 
     //some action 
     throw e; //can I do this? 
    } 
    //some action 
    return result; 
} 

它的工作,但我不不知道也許我出於某種原因不這樣做。

+0

嗨,我的意思是主要思想在使用拋出內部方面。 – Alrail

回答

3

一個建議(不是爲了做一些異常魔術而設計的)不應該吞服adviced方法拋出的異常。

所以,是的,如果你有一個圍繞point.proceed()試試看,那麼你應該重新拋出異常。

如果您在執行(成功)方法後不需要在通知中完成某些處理,則可以省略完整的異常處理。

@Around("execution(* *(..)) && @annotation(someAnnotation)") 
public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable { 
    //some action 
    return point.proceed(); 
} 

如果您需要一些在通知調用後完成的處理,請使用try-catch-finally bock。 catch子句是可選的,但你必須重新拋出異常

public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable {   
    //some action 
    try { 
     Result result = point.proceed(); 
     //some action that are executed only if there is no exception 
    } catch (Exception e) { 
     //some action that are executed only if there is an exception 
     throw e; //!! 
    } finally { 
     //some action that is always executed 
    } 
}