SpringAOP 面向切面编程-异常+最终通知(了解)

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringAOP 面向切面编程-异常+最终通知(了解)相关的知识,希望对你有一定的参考价值。

总结:
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()
	}

以上是关于SpringAOP 面向切面编程-异常+最终通知(了解)的主要内容,如果未能解决你的问题,请参考以下文章

SpringAOP 面向切面编程-前置通知

SpringAOP 面向切面编程-环绕通知(掌握)

AOP面向切面编程

图文并茂!!!一文搞懂SpringAOP(面向切面编程)

图文并茂!!!一文搞懂SpringAOP(面向切面编程)

AOP面向切面编程