spring学习笔记(17)——返回通知&异常通知&环绕通知
本人接上篇spring学习笔记(16)——AOP之前后置通知
返回通知
/** * 返回通知: 方法正常执行完后调用,如果有异常,则不调用 * 可以访问到方法的返回值 * @param joinPoint * @param result 方法的返回值 */
@AfterReturning(value="execution(* com.zj.asceptj.*.*(..))",returning="result")
public void afterReturning(JoinPoint joinPoint,Object result){
//方法名
String methodName = joinPoint.getSignature().getName();
System.out.println("method "+methodName+" end:"+result);
}
异常通知
/** * 异常通知: 当方法出现异常时 * 可以指定出现哪些异常时才执行: 如何指定?通过入参指定,如: * 如果入参为NullPointException ex,那么只有在发生空指针异常时才执行 * @param joinPoint * @param ex */
@AfterThrowing(value="execution(* com.zj.asceptj.*.*(..))",throwing="ex")
public void afterThrowing(JoinPoint joinPoint,Exception ex){
//方法名
String methodName = joinPoint.getSignature().getName();
System.out.println("method "+methodName+" occurs:"+ex);
}
环绕通知
- 环绕通知类似于动态代理的全过程,可以使用环绕通知实现前置通知,后置通知,返回通知,异常通知的功能,十分强大,但并不常用
关于动态代理,请查看spring学习笔记(15)——AOP基础
/* 环绕通知需要携带ProceedingJoinPoint类型的参数 环绕通知类似于动态代理的全过程: ProceedingJoinPoint这个类型的参数可以决定是否执行目标方法 且环绕通知必须有返回值,返回值即为目标方法的返回值 @param pjd /
@Around("execution(* com.zj.asceptj.*.*(..))")
public Object around(ProceedingJoinPoint pjd){
Object result = null;
String methodName = pjd.getSignature().getName();
try {
//前置通知
System.out.println("method:"+methodName+" begins with "+Arrays.asList(pjd.getArgs()));
//执行目标方法
result = pjd.proceed();
//返回通知
System.out.println("method:"+methodName+" end with "+result);
} catch (Throwable e) {
// 异常通知
System.out.println("method:"+methodName+" occurs exception "+e);
}
//后置通知
System.out.println("method ends");
return result;
}
还没有评论,来说两句吧...