连接点方法成功执行---->After执行---->返回通知方法---->AfterRunning执行
[object Object] <aop:around method="around" pointcut-ref="moocPiontcut"/> <aop:around method="aroundInit" pointcut="execution(* com.imooc.aop.schema.advice.biz.AspectBiz.init(String,int)) and args(bizName,times))"/>
moocPiontcut切入点 执行了around,init切入点 又执行了aroundinit
return之前 会先调用finally里的
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.
Eclipse快捷提示:alt+/
IDEA快捷图示:alt+enter
像这种问题建议你搜索网址:www.baidu.com——〉开发工具名+快捷键提示及设置 +enter
我说的是带参数的环绕通知,方法名这个我摘掉,我想问参数如果不能再配置里确定,而是方法里传过来的该怎么用?
我试了一下,当两个类型都是String时,你把args(bizName,times) 换成args(times,bizName),aroundInit方法里面的输出就会返回来,但是类型还是String和Int时,你用args(times,bizName),也就是参数返回来的话,aroundInit就不会执行了。
ctrl+shift+/
around通知》before通知》around通知》after通知》afterReturn通知;
我个人觉得这是个规定;不然的话,为什么around通知在before之前呢?
不是jar问题。另外你是杰少吧
注释掉你就知道作用了
当有配置around时,after和after-returning的执行顺序和它们在xml文件中配置顺序相反。
选中行,ctrl+shift+c
经过测试,After-returning和After的输出和xml文件中的配置顺序有关系,
当添加上around后,会将xml中After-returning和After的配置顺序反转,也就是倒着输出
after和after-returning的执行顺序,与你spring-*.xml文件中的配置先后顺序有关
after和after-returning的执行顺序,与你spring-*.xml文件中的配置先后顺序有关
execution(* com.imooc.aop.aspect.*Biz.*(..)) *和com之间加个空格
怎么会和配置顺序有关? 你试过了?
你的after方法对吗
aop:after-returning
aop:after-throwing
aop:after
经过验证和配置文件里面的配置顺序有关系
恩,是的。和配置顺序有关系
http://www.imooc.com/qadetail/76866
因为是随机的,你可以用order设置顺序,详见spring文档。文档中的finally仅仅表示一定会被执行,并不代表最后被执行
看了一下两处的视频,after的输出都是在after returning之前的