struts过滤器算是用到AOP的思想么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts过滤器算是用到AOP的思想么?相关的知识,希望对你有一定的参考价值。

我对AOP的理解是执行一个功能,会在前后有一些操作。
filter是对请求前后过滤。
那filter算是用到AOP的思想了么?

拦截器是Aop的思想,filter不算,完全是两个不同的东西,效果虽然差不多,但实现原理不一样。追问

struts的拦截器不就是叫filter么?难道有区别?

追答

拦截器叫Interceptor,filter多指javax.servlet.Filter

参考技术A struts的核心之一就是他的拦截器,拦截器在某个方法的前后都可以进行某些操作,例如对参数进行装配,异常的处理,这就是AOP的体现。 参考技术B 就是插拔思想。想用什么插什么。 参考技术C AOP是主要控制事物的

Aop_思想篇

这是关于aop的第一篇,想主要讲aop的本质,下篇会记录aop的实现,过滤器和拦截器,aspect的使用。好了,言归正传吧。

这部分可以先略过

 AOP(技术):是一种编程思想,即面向切面编程。Aop把软件系统分为两个部分:核心关注点,横切关注点。

核心关注点:业务处理的主要流程

横切关注点:一般可共用的功能,baas中,比如日志打印的部分,权限校验的部分。

------------------------------------------------------------------------------------------------------------------------

spring框架正是因为有AOP IOC这两个特性,才能使软件之间的逻辑更加清晰,配置更灵活,当然这也是spring框架的目的(废话一句)。

AOP和IOC是一种思想。

AOP在java中是利用反射机制实现的(如果你对动态代理熟悉的,可以用动态代理理解,其实其底层也是反射机制)

以一个银行的交易系统为例

取款,转账,更改重要的信息之类的业务一般都需要验证用户的身份才能进行下一步的业务操作。那么这个验证的部分属于可以提取的公用部分,自然,你也可以在每个业务流程中验证,如果这样,止步便好。

技术分享图片

很明显,这两个流程有重复的身份验证部分,在没有接触aop之前,想必你们也有方法优化,可以将重复的部分封装成方法,然后调用就行。那么aop是怎么优化的?他是是将重复的功能模块提取出来,但是不用我们在流程中去加入其他任何的代码表明在取款前需要进行验证用户(以取款为例),也就是在取款和转账的流程代码中没有身份验证的步骤,到这里,我希望你们问不在业务逻辑中加入验证的功能,aop是怎么实现在进行取款和转账业务的身份验证的?

前面已经说到把公用的代码提取出来了,然后告诉spring这段代码要加到哪些地方,spring就会帮你加上去,在运行的时候,会先去执行验证部分的代码,然后在继续执行你的主业务。到这里,应该能感觉到aop的作用,我们只需要关注主流程便可,而不用在写转账业务的时候还要去考虑先校验参下数,打个log,做下用户身份校验然后浩浩荡荡的开始转账操作。

所以回到第一段内容:

核心关注点:取款,转账

横切关注点:一般可共用的功能,入参校验,身份验证

图示理解:aop本质是将无业务无关的但共用的功能提取成一个横向的切面,当然,比如不管在取款前还是转账前(执行所有的业务操作),都需要进行入参校验,日志打印,那么可以将这两个功能提取成两个切面,然后再需要的地方将切面插入。

技术分享图片

 

以上是关于struts过滤器算是用到AOP的思想么?的主要内容,如果未能解决你的问题,请参考以下文章

解释一下Java反射,aop,拦截器,过滤器。

struts2的拦截器跟spring2 AOP有啥区别?哪个好?

Struts2知识复习之三

深入分析JavaWeb Item47 -- Struts2拦截器与文件上传下载

struts2 过滤器和拦截器的区别和使用

8.Struts2拦截器