@Aspect,是否属于过滤器或拦截器?

最近在写一个spring的拦截器用以拦截请求参数,但过程中产生了一些困惑,特此求解

有一种@Aspect类注解,在方法里通过@before,@around和@after注解的方式来拦截数据,配置起来比拦截器简单,开始以为这是通过注解的方式写的拦截器,百度了一下更不清楚了,净是说这是aop的具体实现,拦截器和过滤器也是aop理念的实现啊。

所以这种拦截方式到底属不属于拦截器?属于spring还是javaEE?到底是应该用拦截器还是用这种注解?又为什么呢?

AOP是一种将业务逻辑提取出来,以实现代码复用,易于维护的方式,拦截器是它的一种具体实现,aspectJ也是一种具体实现,但拦截器具有代码侵入性,aspectJ具有相比更低的侵入性,更好,易于维护

举个例子,简单说明一下吧,比如你有个庞大复杂的项目,里面有很多pojo,其中很多牵扯到数字计算,返回double类型的结果,而根据不同情况对返回结果的精度有的要求小数点后四位,有的要求三位,这时候,切面就可以用上,用一个拦截 返回double的getter,进行格式化,然后输出,完美解决格式化数字效果,这只是个例子,其他的请自行举一反三

拦截器使用了AOP,但AOP并不仅限于拦截器,应该可以理解拦截器是AOP一种特定实现的扩充,二者应该有一种包含关系。

AOP使用的主要是动态代理 , 过滤器使用的主要是反射 ;拦截器使用的主要是回调 。

一个请求过来 ,先进行过滤器处理,看程序是否受理该请求 。 过滤器放过后 , 程序中的拦截器进行处理 ,处理完后进入 被 AOP动态代理重新编译过

的主要业务类进行处理 。

理解3着的不同 ,调用地方 ,就好了 。 3着不必讨论谁属于谁!

拦截器与过滤器的区别 :

拦截器是基于java的反射机制的,而过滤器是基于函数回调。
拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。

如果你充分理解web请求响应模式就不难区分了,interceptor拦截器是用于处理页面提交的请求响应并进行处理,例如做国际化,做主题更换,过滤等。
AOP是spring基于动态代理实现的一套处理业务逻辑的技术,可以拦截你调用的某个方法,并且可以在某个逻辑点织入其他逻辑,而不是处理请求响应。