Spring----学习(15)----返回通知 && 异常通知 && 环绕通知

本文详细介绍了Spring框架中的通知类型,包括@AfterReturning返回通知、@AfterThrowing异常通知以及环绕通知。环绕通知具有最强的功能,能够完全控制连接点,需要使用ProceedingJoinPoint参数并调用proceed()方法来执行原方法。不调用proceed()会导致目标方法未执行,而忽略返回值则可能引发空指针异常。
摘要由CSDN通过智能技术生成

 1.@AfterReturning返回通知

 2.@AfterThrowing 异常通知

 

@Aspect
@Component
public class Log {
	/**
	 * 返回通知:在方法正常结束后返回的通知。
	 * 返回通知可以访问到目标方法的返回值
	 *
	 */
	@AfterReturning(value = "execution(int com.lishenhuan.aop.impl.ArithmeticCalculator.*(int, int))"
			 ,returning="result")
	public void afterReturning(JoinPoint joinPoint,Object result) {
		String mathodName = joinPoint.getSignature().getName();
		List<Object> args = Arrays.asList(joinPoint.getArgs());
		System.out.println("The method " + mathodName + " end with " + result);
	}


	/**
	 * 异常通知:在目标方法出现异常时,可以访问到异常对象。
	 *           并且可以指定只有在出现某种特定异常的时候再执行通知代码。
	 *
	 */
	@AfterThrowing(value = "execution(int com.lishenhuan.aop.impl.ArithmeticCalculator.*(int, int))"
			 ,throwing="ex")
	public void afterThrowing(JoinPoint joinPoint,Exception ex) {
		String mathodName = joinPoint.getSignature().getName();
		List<Object> args = Arrays.asList(joinPoint.getArgs());
		System.out.println("The method " + mathodName + " occurs exception: " + ex);
	}
}

 3.环绕通知。

         •环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点.

         •对于环绕通知来说, 连接点的参数类型必须是 ProceedingJoinPoint . 它是 JoinPoint 的子接口,

              允许控制何时执行, 是否执行连接点.

           •在环绕通知中需要明确调用 ProceedingJoinPoint proceed() 方法来执行被代理的方法.

               如果忘记这样做就会导致通知被执行了, 但目标方法没有被执行.

          •注意: 环绕通知的方法需要返回目标方法执行之后的结果, 即调用 joinPoint.proceed(); 的返回值,

                否则会出现空指针异常

/**
	 *环绕通知:必须携带ProceedingJoinPoint类型的参数。
	 *环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数。决定目标方法是否执行
	 *环绕通知必须有返回值,返回值即为目标方法的返回值。
	 */
	@Around("execution(int com.lishenhuan.aop.impl.ArithmeticCalculator.*(int, int))")
	public Object round(ProceedingJoinPoint pdj) {

		Object result = null;
		//执行目标方法
		try {
			result = pdj.proceed();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		return result;

	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值