简单模仿Struts2实现AOP
Struts2非常巧妙地利用递归算法来实现AOP(
Aspect Oriented Programming,面向切面编程
),我们来简单模仿一下其执行流程。
Action接口
MyAction实现Action
Interceptor接口
下面分别是Interceptor的三个实现类
下面就是我们的总指挥ActionInvocation接口了
ActionInvocation的默认实现类DefaultActionInvocation,所有的调度都是在这里完成的
OMG,微软自带的截图工具居然不能支持长截图,下次找个好一点点的截图工具
好了,该测试一下了,看看效果,测试代码如下:
犹抱琵琶半遮面的测试结果露面了:
1,开始执行ChainingInterceptor====
2,开始执行LoggingInterceptor====
3,开始执行TimerInterceptor====
====Action执行====
3,结束执行TimerInterceptor====
2,结束执行LoggingInterceptor====
1,结束执行ChainingInterceptor====
2,开始执行LoggingInterceptor====
3,开始执行TimerInterceptor====
====Action执行====
3,结束执行TimerInterceptor====
2,结束执行LoggingInterceptor====
1,结束执行ChainingInterceptor====
测试成功,收工,有兴趣的可以往下看,简单看看Struts2执行流程的源码
上图:
ActionProxy从ActionMapping中获得namespace,name和method,之后调用execute方法
接着我们来看看ActionProxy的默认实现类DefaultActionProxy的execute方法
在上面是否惊喜的看到了invocation.invoke()方法,之后的流程就跟我们之前讲的很相似了,不过我们这里只是简单地涉及了一小部分源码
The secret to happiness is freedom. And the secret to freedom is courage.
——
Thucydides