Struts2-Interceptor的逻辑意义

来源:互联网 发布:淘宝地区怎么修改 编辑:程序博客网 时间:2024/05/16 08:40

站在事件处理流程规范化的角度来看待Interceptor对象,Interceptor连同Action和result被称为事件处理节点,它们都是事件处理流程规范化过程中对事件的流程进行进一步细化的结果,就像策略部队和主力部队之间的关系,连同做任何事情都要分清主次,当我们将事件处理的主要职责(进行核心业务逻辑处理)都交付给Action,而把次要的任务(设置action的运行参数等)交付给Interceptor对象,这就意味着我们在逻辑上对整个事件的处理流程有着深刻的认识,并能将不同的职责分而治之,并分配到不同的对象上去执行。


Interceptor对象的引入实际上是对事件处理流程中的主要职责和次要职责的有效划分,并让每一个执行层次都能够完成主要的职责归属。

站在Interceptor对象与Action对象共同构成的执行栈的角度来看Interceptor对象。看以看到两个重要的特性:其一,多个Interceptor对象在核心响应处理类Action的周围形成众多的执行层次的划分;其二,整个执行栈的结构成为XWORK控制流实现AOP的数据结构的基础。在传统的Selvelet实现模式中,整个响应类是一个无状态类,因而在响应方法的内部实现编程层次的划分。而在XWORK的实现模式下,这完全不成为问题。Interceptor对象反而成为Action类进行数据和状态维护的最佳场所。


Interceptor对象的引入能够极大地丰富整个事件处理流程的执行层次,从而为实现AOP编程打下坚实的数据结构基础。


站在程序执行流程的角度看Interceptor对象所起的作用。Interceptor对象和Action对象共同构成的执行栈在被ActionInvocation调度执行的过程中,应用了责任链模式。责任链模式的一个重大逻辑意义在于改变事件处理流程中的顺序处理的执行逻辑。整个执行栈,在执行时顺序调度的过程被转化为对一个链表元素进行遍历的循环过程,当这个过程与ActionInvocation形成递归调度时,就自然而然形成为AOP模型的雏形。


Interceptor对象的引入能够使得责任链模式在整个执行栈的调度过程中顺利实施,从而改变事件处理流程中的顺序处理逻辑,自然而然形成为AOP模型的雏形。

摘自《Strut2技术内幕》

0 0