【结论】

在多个切面类的“切入点相同”并且每个切面都“没有定义order属性”的情况下,则切面类(中的通知)的执行顺序与该切面类在<aop:config>元素中“声明的顺序”相关,即先声明的切面类先执行,后声明的切面类后执行。

【代码示例】

 <aop:config>
<!-- 用户自定义的切面01,用于不同切面类执行顺序的测试 -->
<aop:aspect id="myMethod01Aspect" ref="myMethod01Bean">
<aop:before method="myBeforeMethod01" pointcut="execution(* com.zjrodger.bakdata.service..*.*(..))"/>
</aop:aspect> <!-- 用户自定义的切面02,用于不同切面类执行顺序的测试。 -->
<aop:aspect id="myMethod02Aspect" ref=" myMethod02Bean">
<aop:before method=" myBeforeMethod02" pointcut="execution(* com.zjrodger.bakdata.service..*.*(..))"/>
</aop:aspect>
</aop:config>

不同切面类配置示例

【运行说明】
上述<aop:config>元素中,定义了两个切面类:“myMethod01Aspect类”和“myMethod02Aspect类”,这两个切面类都没有指定“order属性”,两个切面类中触发增强通知的切入点都相同。
当程序执行时并且触发切入点后,myMethod01Aspect类中的myBeforeMethod01()方法首先执行,之后才会执行myMethod02Aspect类中的myBeforeMethod02()方法。
若将上述<aop:config>元素中,两个切面类的定义顺序互换,则最终增强通知的执行顺序也会与上述相反。

【注意点】
若<aop:config>元素中同时存在“<aop:advisor>”元素和“<aop:aspect>元素”(“<aop:pointcut>元素” 可有可无),则这些元素必须按照< aop:pointcut >,<aop:advisor>和<aop:aspect>此顺序来定义
正因为“<aop:advisor>”元素和“<aop:aspect>元素”定义顺序是不能调整的,从而导致在没有指定 “order属性”的前提下,“<aop:advisor>”元素对应切面类中通知的执行顺序优先于“<aop:aspect>元素” 对应切面类中通知的执行。
此时,只能通过指定Order属性来调整这两个切面类中通知执行的先后顺序了。

【参考资料】
01:《在应用层通过spring特性解决数据库读写分离》http://jinnianshilongnian.iteye.com/blog/1720618#comments
02:《AOP 之 6.7 通知顺序 ——跟我学spring3》http://jinnianshilongnian.iteye.com/blog/2235572

最新文章

  1. Angular2 Hello World 之 2.0
  2. Fiddler调式使用知多少(一)深入研究
  3. 【BZOJ-3572】世界树 虚树 + 树形DP
  4. Python3基础 type获取变量的类型
  5. Android ADB启动失败 ADB server out of date
  6. MVC5添加控制器总是报“Multiple object sets per type are not supported”
  7. HDU 1394 Minimum Inversion Number(线段树的单点更新)
  8. 基于mongoDB的capped collection的性能优化
  9. Java---网络编程(1)
  10. phantomjs初次认识
  11. XSHELL工具上传文件到Linux以及下载文件到本地(Windows)
  12. JavaScript一个猜数字游戏
  13. [HNOI 2005]狡猾的商人
  14. oracle dmp数据导入
  15. 使用CocoaPods时遇到 Permission denied 问题
  16. Mybatis笔记三:全局配置文件
  17. web@HTML重要标签详介绍.
  18. Collection集合总结,List和set集合的用法,HashSet和LinkedHashSetde用法
  19. Git-分支创建、拉取、切换
  20. ISCSI target的两种安装方法

热门文章

  1. vs2010,vs2012注释快捷键
  2. Pytorch数据读取框架
  3. Sublime Text 3 注册码失效(被移除)解决方法
  4. Python_oldboy_自动化运维之路(八)
  5. 用js面向对象思想封装插件
  6. centos7上安装指定版本gitlab
  7. java jps命令使用解析
  8. servlet 学习笔记(二)
  9. Visual Studio 2013百度云下载地址
  10. ueditor初始化