问答详情
源自:5-4 Advice应用(上)

aop:after使用时有疑惑,麻烦指点下

关于aop:after,老师说是最后一场代码,可是我无意中切换了一下xml中配置顺序

https://img.mukewang.com/5c81d13c0001dda007260399.jpg

然后test执行结果就变成了

https://img1.mukewang.com/5c81d172000174f904520288.jpg

这是什么原因呢?老师或哪位大侠指点下~谢谢~

提问者:萌呆呆 2019-03-08 10:21

个回答

  • 忘记过去丶
    2019-03-13 21:25:57
    已采纳

    aop执行方式为:前置通知==>所要增强的方法==>后置通知==>最终通知

    在出现异常时会进行:前置通知==>所要增强的方法==>异常通知==>最终通知

    此时的后置通知不会显示而显示异常通知.

    而用xml进行配置时,是按照我们写好的顺序进行动态组合完成,最终和后置通知是随着xml配置的前后顺序改变的,但是经过测试不会影响前置和所要增强的方法的顺序,但是会影响最终和后置通知的位置.

    我认为利用环绕通知进行方法的增强(aop:around)是一个比较好的方式,不会出现顺序问题.

    还有就是,关于这个aop方法增强的应用就我现在所认知大多还是为了事务服务,所以通过配置 事务管理和事务注解支持

    <!-- 事务管理器  -->  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
      
    <!-- 开启事务控制的注解支持 -->  
    <tx:annotation-driven transaction-manager="transactionManager"/>

    将事务放入spring ioc容器中就可以解决数据的一致性和完整性问题.

  • Truth123
    2020-01-05 12:37:39

    你的after方法是不是写在了afterReturn方法的前面?

  • 忘记过去丶
    2019-03-13 21:30:33

    关于底层的一些代码可以去百度看一下,因为这有涉及到关于spring执行流程相关的问题,总的来说,我们并不太好去确定xml的前后置和最终以及通知的相关顺序.