SpringAOP 面向切面编程-异常+最终通知(了解)
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringAOP 面向切面编程-异常+最终通知(了解)相关的知识,希望对你有一定的参考价值。
总结:
Aspectj表示切面执行时间,用的通知(Advice)。
这个通知可以使用注解表示。
5个注解表示切面的5个执行时间, 这些注解叫做通知注解。
- @Before : 前置通知 👉【Spring】AOP 面向切面编程-前置通知(掌握)
- @AfterRetunring: 后置通知 👉【Spring】AOP 面向切面编程-后置通知(掌握)
- @Around: 环绕通知 👉【Spring】AOP 面向切面编程-环绕通知(掌握)
- @AfterThrowing:异常通知
- @After:最终通知
一、@AfterThrowing:异常通知
1.异常通知方法的定义(在切面类中)
1)方法是public
2)方法是没有返回值,是void
3)方法名称自定义
4)方法有参数是Exception
public void myAfterThrowing(Exception ex){
}
2.@AfterThrowing 异常通知的 注解语法
@AfterThrowing(value="切入点表达式",throwing="自定义变量")
- 属性:
- value 切入点表达式
- throwing 自定义变量,表示目标方法抛出的异常。
变量名必须和通知方法的形参名一样
- 位置:在方法的上面
特点:
- 在目标方法抛出异常后执行的, 没有异常不执行
- 能获取到目标方法的异常信息。
- 不是异常处理程序。可以得到发生异常的通知, 可以发送邮件,短信通知开发人员。
- 看做是目标方法的监控程序。
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 切入点表达式
- 位置: 在方法的上面
特点:
- 在目标方法之后执行的。
- 总是会被执行。
- 可以用来做程序最后的收尾工作。例如清除临时数据,变量。 清理内存
2.使用aspectj框架的注解,实现最终通知
1.在业务接口中添加一个方法:doThird
2.实现这个方法
3.添加最后通知注解(在方法上面添加)
@After(value="execution(* *..SomeServiceImpl.doThird(..))")
public void myAfter(){
}
4.👇添加输出语句
5.测试:业务方法没有异常
6.如果业务方法抛异常
测试:最终通知依然会被执行
最终通知的执行
try{
SomeServiceImpl.doThird(..)
}finally{
myAfter()
}
以上是关于SpringAOP 面向切面编程-异常+最终通知(了解)的主要内容,如果未能解决你的问题,请参考以下文章