【Spring】AOP 面向切面编程-异常+最终通知(了解)

总结:
Aspectj表示切面执行时间,用的通知(Advice)。
这个通知可以使用注解表示。
5个注解表示切面的5个执行时间, 这些注解叫做通知注解

一、@AfterThrowing:异常通知

1.异常通知方法的定义(在切面类中)

1)方法是public
2)方法是没有返回值,是void
3)方法名称自定义
4)方法有参数是Exception

public void myAfterThrowing(Exception ex){
        
}
2.@AfterThrowing 异常通知的 注解语法
@AfterThrowing(value="切入点表达式",throwing="自定义变量")
  • 属性:
    • value 切入点表达式
    • throwing 自定义变量,表示目标方法抛出的异常。
      变量名必须和通知方法的形参名一样
  • 位置:在方法的上面

特点:

  1. 在目标方法抛出异常后执行的, 没有异常不执行
  2. 能获取到目标方法的异常信息。
  3. 不是异常处理程序。可以得到发生异常的通知, 可以发送邮件,短信通知开发人员。
  4. 看做是目标方法的监控程序。

3.使用aspectj框架的注解,实现异常通知

1.在业务接口中添加一个方法:doSecond
在这里插入图片描述

2.实现这个方法
在这里插入图片描述
3.添加异常通知注解(在方法上面添加)

@AfterThrowing(value="execution(* *..SomeServiceImpl.doSecond(..))",
			   throwing ="ex")
public void myAfterThrowing(Exception ex){

}

在这里插入图片描述
4.👇添加输出语句

@AfterThrowing(value="execution(* *..SomeServiceImpl.doSecond(..))", 
			   throwing ="ex")
public void myAfterThrowing(Exception ex){
	System.out.println("异常通知,在目标方法抛出异常时执行的,异常原因是:"+ ex.getMessage());
}

异常发生可以做:
1.记录异常的时间,位置,等信息。
2.发送邮件,短信,通知开发人员

5.测试:
在这里插入图片描述
6.让业务方法抛出一个异常
在这里插入图片描述
测试👇
在这里插入图片描述
异常通知的执行

 try{
       SomeServiceImpl.doSecond(..)
  }catch(Exceptoin e){
       myAfterThrowing(e);
  }

二、@After 最终通知

最终通知方法的定义

1)方法是public
2)方法是没有返回值,是void
3)方法名称自定义
4)方法没有参数

@Aspect
public class MyAspact {
	public void myAfter(){

	}
}
1.@After 最终通知注解语法格式
@After(value="切入点表达式")
  • 属性: value 切入点表达式
  • 位置: 在方法的上面

特点:

  1. 在目标方法之后执行的。
  2. 总是会被执行。
  3. 可以用来做程序最后的收尾工作。例如清除临时数据,变量。 清理内存
2.使用aspectj框架的注解,实现最终通知

1.在业务接口中添加一个方法:doThird
在这里插入图片描述

2.实现这个方法
在这里插入图片描述

3.添加最后通知注解(在方法上面添加)

@After(value="execution(* *..SomeServiceImpl.doThird(..))")
    public void myAfter(){
       
    }

4.👇添加输出语句
在这里插入图片描述
5.测试:业务方法没有异常
在这里插入图片描述

6.如果业务方法抛异常
在这里插入图片描述
测试:最终通知依然会被执行
在这里插入图片描述
最终通知的执行

 try{
    	SomeServiceImpl.doThird(..)
	}finally{
     	myAfter()
	}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值