您的位置:首页 > 编程语言

为啥拦截器在invocation.invoke()之前的代码,将会在Action之前被依次执行,而在invocation.invoke ()之后的代码,将会在Action之后被逆序执行?

2016-11-17 13:11 246 查看
只是小知识点,有点意思,记下来

因为 可以简化成下面两段代码:

----------------------------------

before(invocation);

// 调用下一个拦截器,如果拦截器不存在,则执行Action

result = invocation.invoke();

after(invocation, result);

----------------------------------

interceptor.getInterceptor().intercept(DefaultActionInvocation.this);

----------------------------------

相当于递归前后加执行语句,相当于一层层的执行,加上很多的分支,类似下面的结构

所以before是从外到内,after是从内到外,一一对应

before();

{

before();

{

before();

{

before();

{

//invocation.invoke();

}

after();

}

after();

}

after();

}

after();

利用到了递归中增加层次,从而实现堆+栈效果,有点类似多层ifelse
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐