• spring3: AOP 之 通知顺序


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

           首先让我们看下

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

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

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

    错误“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文件中。

  • 相关阅读:
    CentOS 6.3 从0开始配置防火墙规则
    ppt删除所有墨迹注释
    生日、毕业与大学的回忆
    20171201-构建之法:现代软件工程-阅读笔记
    软件工程课程总结
    课后作业-阅读任务-阅读提问-4
    Forward团队-爬虫豆瓣top250项目-项目总结
    Forward团队-爬虫豆瓣top250项目-最终程序
    课后作业-阅读任务-阅读提问-3
    20171117-构建之法:现代软件工程-阅读笔记
  • 原文地址:https://www.cnblogs.com/achengmu/p/8583882.html
Copyright © 2020-2023  润新知