首页 > 代码库 > Struts2之拦截器原理分析及使用-中
Struts2之拦截器原理分析及使用-中
一、学习案例:关于拦截器的了解,我们肯定不在单纯地编码。我会带大家通过研读源码了解拦截器的实现方式,以及学习struts2的编码方式。
二、案例分析:
a)适配器的实现首先会实现Interceptor接口,而在实现类中,我们会实现三个方法:init(),destroy(),intercept()。而前两个对于我们来讲并不需要。当然struts2也采用了适配器模式,从而让实现类代码更加清晰,容易辨别。在此,我们会通过继承AbstractInterceptor抽象类替换Interceptor接口,由此,我们只需重写intercept()即可。通过查看AbstractInterceptor源码,我们可以发现它同样实现了Interceptor接口,所以以后再实现拦截器只需继承AbstractInterceptor即可。
b)ActionInvocation类可以讲是拦截器的核心。
通过输出invocation.getAction().getClass(),我们可以发现,两个拦截器都是关联的同一个Action。
c)拦截器拦截的是什么?精确的说法应该是拦截器拦截的是目标action的execute()方法。而对于自定义方法的拦截,我们需要:方法过滤拦截器(MethodFilterInterceptor)。
d)查看源码时,我们会看到一个方法:TextParseUtil.CommaDelimitedStringToSet(...);这个方法是对配置文件中includeMethod和excludeMethod中的字符串进行截取,反过来理解就是,我们在配置文件中方法分隔要以逗号分隔,当然是英文的逗号。
e)通过查看文档,或者查看源码我们可以发现MethodFilterInterceptor中同样存在intercept(),但是我们在实现类中并不会实现它,而是doIntercept(),而它在此处的作用,通过分析源码,我们可以知道它是判断配置文件中的方法是否需要拦截,配置了此方法就进行拦截,不配置,拦截p啊。呵呵。
三、经验之谈:
a)在这里要提一下设计模式。设计模式是对一些特定场景实现代码的设计经验总结。在Java中有大概有23种吧,当然不是说让大家都熟练掌握,说实话,我现在也就了解那么几种,实际应用也没怎么使过。大家只需简单了解下就行。毕竟对自身编码会有好处的。
b)我们只要理解过滤器就很容易理解拦截器,无论是设计原理、设计模式还是实现方式上两者都是一样的,区别在于过滤器可以过滤一切东西,拦截器只能拦截action,因为我们只能在action上配置拦截器。
c)当我们编写代码时,要养成写注释的习惯。这个很重要,不只是为了让我们自己可以更好的查看,同样更方便他们对于自己所编写的代码理解,这在多人协作开发中尤为重要。你可以想想,当你进公司后,如果公司让你维护一个系统,如果系统代码连个注释都没有,你什么想法,或者你会忍不住走人,呵呵,开玩笑,只是让大家知道,养成写注释的习惯有多么重要。同时,写注释还有另一个好处,就是生成文档。关于生成文档的方式,及原理,大家可以问问度娘,很简单的,在此我就不再单开博文讲解了。
四、参考项目:因为我们主要是对源码分析,而项目只是让大家对流程了解和掌握。这一章,我们就不提供项目演示了,其实也没什么可演示的,大家多看看源码,分析下AbstractInterceptor和MethodFilterInterceptor两个接口即可。
五、每日一乐:
非诚勿扰女嘉宾根本不算什么,要知道宿管阿姨可以灭一整栋楼男生的灯!
最终解释权归爱尚合伙人所有,转载请注明出处。
Struts2之拦截器原理分析及使用-中