萌呆呆
2019-03-08 10:21
关于aop:after,老师说是最后一场代码,可是我无意中切换了一下xml中配置顺序
然后test执行结果就变成了
这是什么原因呢?老师或哪位大侠指点下~谢谢~
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容器中就可以解决数据的一致性和完整性问题.
你的after方法是不是写在了afterReturn方法的前面?
关于底层的一些代码可以去百度看一下,因为这有涉及到关于spring执行流程相关的问题,总的来说,我们并不太好去确定xml的前后置和最终以及通知的相关顺序.
Spring入门篇
268791 学习 · 963 问题
相似问题