切面(Aspect):一个关注点的模块化,这一关注点的实现可能横切多个对象,而这个模块化的过程,由Interceptor来实现,例如,数据库的事务管理
就是一个典型的切面。
通知(Advice):在特定的连接点,AOP框架执行的动作,各种通知类型包括:Before通知、After通知、Around通知和Throw通知等。
切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架允许开发者指定切入点,例如使用正则表达式来指定触发通知的集合特征。
连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
在Struts2中,它们分别对应:
切面(Aspect):Interceptor实现
通知类型(Advice):环绕通知(Around)通知
切入点(Pointcut):Action对象
连接点(JoinPoint):Action的执行
在Xwork中所定义的Interceptor,是一组环绕在切入点(Action对象)的执行切面,可以在Action调用之前或者Action调用之后执行,从而对Action对象起到拦截作用。
XWork中的AOP实现,完全是通过Interceptor和Action共同构成的执行栈与ActionInvocation的配合调度共同完成的,XWork中的Interceptor的主要职责,就是通过
对Action状态的改变而对Action的行为进行扩展,XWork是使用AOP来实现IOC。
有关Interceptor的几个结论:
1:Interceptor对象的引入实际上是对事件处理流程中主要职责和次要职责的有效划分,并让每一个执行层次都能够完成其必要的职责归属。
2:Interceptor对象的引入能够极大的丰富整个事件处理流程的执行层次,从而为实现AOP编程打下坚实的数据结构基础。
3:Interceptor对象的引入能够使得责任链模式在整个执行栈的调度过程中顺利实施,从而改变事件处理流程中的顺序处理逻辑,自然形成AOP模型的雏形。
Spring是使用Ioc来实现AOP
这个结论的意思是说,spring是通过容器来完成对象生命周期和关联关系的管理,而我们在使用Spring进行面向切面的编程时,只需要对AOP的众多要素进行bean的定义,
同时指明它们之间的调用关系,并将它们纳入到Spring的容器中进行管理,就可以利用Spring的组件来实现AOP编程。
XWork的AOP实现与Spring的AOP实现之间的对象
AOP元素 | Spring实现机制 | Xwork实现机制 |
切面(Aspect) | 拦截器 | 拦截器 |
通知(Advice) | Around, Before,After | Around, Before,After |
切入点(Pointcut) | 满足特定条件的方法 | Action对象 |
连接点(Joinpoint) | 方法的执行 | Action的执行 |
AOP编程的本质,是对切入点运行状态的改变。