为啥拦截器在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
因为 可以简化成下面两段代码:
----------------------------------
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
相关文章推荐
- 关于调试----在单步执行某个程序的中间修改源代码,当修改代码之后移动到下一步时,调试器自动在执行下一语句之前重新编译
- JAVA基础(30) Java代码finally语句到底是在return之前还是之后执行?
- 拦截器、执行-拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。-by小雨
- 如何使得代码在main函数之前/之后执行
- 登录拦截器actionInvocation.invoke()是什么意思,配置自己的验证拦截器
- java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
- webwork拦截器interceptor 之 ActionInvocation 意义
- webwork拦截器interceptor 之 ActionInvocation 意义
- main主函数执行完之后再执行其他代码的方法
- 关于check-in应该是在代码审查之前还是之后
- main函数之前执行代码
- 在action中执行javascript代码
- Hibernate创建buildSessionFactory()之后的代码都不执行
- struts2 拦截器 核心 ActionInvocation 类
- C R E AT E S U S P E N D E D标志使得应用程序能够在它有机会执行任何代码之前修改线程的某 些属性
- 通过拦截器来统计每个action的执行时间
- webwork拦截器interceptor 之 ActionInvocation 意义(转载)
- 通过拦截器来统计每个action的执行时间
- 测试order by 是在group by之前执行的还是之后执行的
- helper.joinRoom之后的java代码就没有执行