追逐繁星0
2016-07-23 20:31
老师,你好,为什么本节视频的after会在afterReturn之前?参考本节(5-5)的05:08(5分08秒)处。
而上节视频的after会在afterReturn之后,参考上节(5-4)的13:36(13分36秒)处。
使用注解时跟配置顺序无关,跟around无关。
使用配置进行编译时跟around有关,跟配置顺序也有关系。
Spring官方的说法是,在同一个切面内,同类型(前/后)的通知顺序是不确定的。因为通过反射确定类中生命(这句话的意思,我也不理解)。
见官方文档说明(同时给出了排序的建议):
When two pieces of advice defined in the same aspect both need to run at the same join point, the ordering is undefined (since there is no way to retrieve the declaration order via reflection for javac-compiled classes). Consider collapsing such advice methods into one advice method per join point in each aspect class, or refactor the pieces of advice into separate aspect classes - which can be ordered at the aspect level.
我认为,after是在目标方法的执行结束的前一刻产生效果,而afterreturning是在目标方法已经结束时产生效果,所以after才会比afterreturning先输出
试了一下,跟xml配置顺序没有关系,只跟有没有配置around有关
当有配置around时,after和after-returning的执行顺序和它们在xml文件中配置顺序相反。
与after和afterReturning的在配置文件的位置有关
Spring入门篇
268785 学习 · 963 问题
相似问题