码迷,mamicode.com
首页 > 编程语言 > 详细

spring15----AOP之通知顺序

时间:2018-12-31 19:16:38      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:返回值   定义   aspect   通过   介绍   RoCE   roc   alt   spec   

如果我们有多个通知想要在同一连接点执行,那执行顺序如何确定呢?Spring AOP使用AspectJ的优先级规则来确定通知执行顺序。总共有两种情况:同一切面中通知执行顺序、不同切面中的通知执行顺序。

       首先让我们看下

1) 同一切面中通知执行顺序:如图所示

                                 技术分享图片

             图 同一切面中的通知执行顺序

而如果在同一切面中定义两个相同类型通知(如同是前置通知或环绕通知(proceed之前))并在同一连接点执行时,其执行顺序是未知的,如果确实需要指定执行顺序需要将通知重构到两个切面,然后定义切面的执行顺序。

2)不同切面中的通知执行顺序

当定义在不同切面的相同类型的通知需要在同一个连接点执行,如果没指定切面的执行顺序,这两个通知的执行顺序将是未知的。

如果需要他们顺序执行,可以通过指定切面的优先级来控制通知的执行顺序。

Spring中可以通过在切面实现类上实现org.springframework.core.Ordered接口或使用Order注解来指定切面优先级。在多个切面中,Ordered.getValue()方法返回值(或者注解值)较小值的那个切面拥有较高优先级,如图所示。

                           技术分享图片

                                         图  两个切面指定了优先级

对于@AspectJ风格和注解方式可分别用以下形式指定优先级:

                            技术分享图片

在此我们不推荐使用实现Ordered接口方法,因此没介绍实现。

 

参考文献

https://jinnianshilongnian.iteye.com/blog/1423489

spring15----AOP之通知顺序

标签:返回值   定义   aspect   通过   介绍   RoCE   roc   alt   spec   

原文地址:https://www.cnblogs.com/Hermioner/p/10202600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!