大数跨境
0
0

关于 Spring AOP 的 5 种通知类型,很少人知道它的优先级!

关于 Spring AOP 的 5 种通知类型,很少人知道它的优先级! 终码一生
2021-07-29
2

点击上方“终码一生”,选择“加为星标

第一时间获取技术干货!



1

通知类型

 

在基于Spring AOP编程的过程中,基于AspectJ框架标准,spring中定义了五种类型的通知,它们分别是:


  • 前置通知 (@Before) 。

  • 返回通知 (@AfterReturning) 。

  • 异常通知 (@AfterThrowing) 。

  • 后置通知 (@After)。

  • 环绕通知 (@Around) :(优先级最高)



2

通知执行顺序


将上面的所有通知类型写入同一个切面中,它的执行顺序为:



代码展示:


@Aspect
@Component
public class SysTimeAspect {

 /**
  * 切入点
  */

 @Pointcut("bean(sysMenuServiceImpl)")
 public void doTime(){}

 @Before("doTime()")
 public void doBefore(JoinPoint jp){
  System.out.println("time doBefore()");
 }

 @After("doTime()")
 public void doAfter(){//类似于finally{}代码块
  System.out.println("time doAfter()");
 }

 /**核心业务正常结束时执行
  * 说明:假如有after,先执行after,再执行returning*/

 @AfterReturning("doTime()")
 public void doAfterReturning(){
  System.out.println("time doAfterReturning");
 }

 /**核心业务出现异常时执行
  * 说明:假如有after,先执行after,再执行Throwing*/

 @AfterThrowing("doTime()")
 public void doAfterThrowing(){
  System.out.println("time doAfterThrowing");
 }

 @Around("doTime()")
 public Object doAround(ProceedingJoinPoint jp)
   throws Throwable
{
  System.out.println("doAround.before");

  try {
  Object obj=jp.proceed();
  return obj;
  }catch(Throwable e) {
  System.out.println("doAround.error-->"+e.getMessage());
  throw e;
  }finally {
  System.out.println("doAround.after");
  }
 }
}



3

代码正常结束

 



4

代码出现异常



作者:其乐m

来源:my.oschina.net/u/4115134/blog/3216359


PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。


 

END

 


终码一生
长按扫描二维码
关注我们 学习更多技术
微信号:zma_1314


往期推荐

IDEA 那些既好用又好玩的宝贝插件,你知道多少?

2021 年 7 月程序员工资统计,最赚钱的岗位出炉

Spring Boot 实现通用 Auth 认证的 4 种方式!

4 款 MySQL 调优工具,大神都在用!

彻底搞懂 Nginx 的五大应用场景

System.currentTimeMillis 的性能,真有如此不堪吗?


【声明】内容源于网络
0
0
终码一生
开发者聚集地。分享Java相关开发技术(JVM,多线程,高并发,性能调优等),开源项目,常见开发问题和前沿科技资讯!
内容 1876
粉丝 0
终码一生 开发者聚集地。分享Java相关开发技术(JVM,多线程,高并发,性能调优等),开源项目,常见开发问题和前沿科技资讯!
总阅读557
粉丝0
内容1.9k