为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

https://img1.sycdn.imooc.com//5c81d13c0001dda007260399.jpg

然后test执行结果就变成了

https://img1.sycdn.imooc.com//5c81d172000174f904520288.jpg

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

正在回答

3 回答

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容器中就可以解决数据的一致性和完整性问题.

3 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Spring入门篇
  • 参与学习       268785    人
  • 解答问题       963    个

为您带来IOC和AOP的基本概念及用法,为后续高级课程学习打下基础

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信