環繞通知@Around
1.環繞通知需要在方法的參數中指定JoinPoint的子接口類型ProceedingJoinPoint為參數
@Around(value="pointCut()")
public void around(ProceedingJoinPoint joinPoint){
}
2.環繞通知會將其他4個通知能幹的,自己都給幹了!
註意:@Around修飾的方法一定要將方法的返回值返回!本身相當於代理!
@Around(value="pointCut()")
public Object around(ProceedingJoinPoint joinPoint){
Object[] args = joinPoint.getArgs();
Signature signature = joinPoint.getSignature();
String methodName = signature.getName();
List<Object> list = Arrays.asList(args);
Object result = null;
try {
//目標方法之前要執行的操作
System.out.println("[環繞日誌]"+methodName+"開始了,參數為:"+list);
//調用目標方法
result = joinPoint.proceed(args);
//目標方法正常執行之後的操作
System.out.println("[環繞日誌]"+methodName+"返回了,返回值為:"+result);
} catch (Throwable e) {
//目標方法拋出異常信息之後的操作
System.out.println("[環繞日誌]"+methodName+"出異常了,異常對象為:"+e);
throw new RuntimeException(e.getMessage());
}finally{
//方法最終結束時執行的操作!
System.out.println("[環繞日誌]"+methodName+"結束了!");
}
return result;
}
環繞通知@Around