博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【第六章】 AOP 之 6.7 通知顺序 ——跟我学spring3 【私塾在线原创】
阅读量:4606 次
发布时间:2019-06-09

本文共 809 字,大约阅读时间需要 2 分钟。

原创内容,转载请注明出处【】

 

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

       首先让我们看下

 

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

 

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

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

 

java代码:
错误“Advice precedence circularity error”:说明AspectJ无法决定通知的执行顺序,只要将通知方法分类并按照顺序排列即可解决。

 

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

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

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

 

图6-7 两个切面指定了优先级

 

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

 

 

 

在此我们不推荐使用实现Ordered接口方法,所以没介绍,示例代码在cn.javass.spring.chapter6. OrderAopTest文件中。

 

原创内容,转载请注明出处【】

 

 

转载于:https://www.cnblogs.com/kaitao/archive/2012/02/27/2369314.html

你可能感兴趣的文章
常用模块,异常处理
查看>>
父窗口与子窗口之间的传值
查看>>
eclipse 找不到 tomcat 的解决方案
查看>>
HDU 1890--Robotic Sort(Splay Tree)
查看>>
MapXtreme2004初学者资料(整理)--有些功能很有价值
查看>>
connection string for Excel/Access 2010
查看>>
【转】【Python】Python中的__init__.py与模块导入(from import 找不到模块的问题)
查看>>
学习wavenet_vocoder之环境配置
查看>>
常用Maven命令
查看>>
[2]一个简单的JAVA程序
查看>>
Docker启动mysql的坑2
查看>>
JS中的对象数组
查看>>
j2ee爬坑行之二 servlet
查看>>
如何开启mysql的慢查询
查看>>
test命令的用法
查看>>
2018年东北农业大学春季校赛 D wyh的迷宫【搜索】
查看>>
一张图教你位运算
查看>>
SharePoint自动初始化网站列表
查看>>
万百腾玩O2O笑话一个——看起来很美,注定没下文
查看>>
JAVA基础入门(JDK、eclipse下载安装)
查看>>