AOP: 使用的主要是动态代理 , 过滤器使用的主要是函数回调;拦截器使用是反射机制 。
一个请求过来 ,先进行过滤器处理,看程序是否受理该请求 。 过滤器放过后 , 程序中的拦截器进行处理 ,处理完后进入 被 AOP动态代理重新编译过的主要业务类进行处理 。
Filter:和框架无关,可以控制最初的http请求,但是更细一点的类和方法控制不了。
Interceptor:可以控制请求的控制器和方法,但控制不了请求方法里的参数(用于处理页面提交的请求响应并进行处理,例如做国际化,做主题更换,过滤等)。
Aspect : 可以自定义切入的点,可以操作方法的参数,但是拿不到http请求,可以通过其他方式如RequestContextHolder获得。
Filter,Interceptor,Aspect 实际上都是对Aop的具体实现。都是对业务逻辑的提取。都可以实现权限检查,日志记录。不同的是使用的范围不同,规范不同,深度不同。
总结
执行顺序 :过滤前 - 拦截前 - aspect 开始执行- controller逻辑处理 - - aspect 结束 - 拦截后 - 过滤后。
Filter 是 java web 里面的,肯定获取不到 spring 里面 Controller 的信息。
Interceptor、Aspect 是和 spring 相关的,所以能获取到 Controller 的信息。