营销型网站.,建站目的,wordpress 作品相册,设计好的装修公司前言伟人曾经说过#xff0c;没有调查就没有发言权(好像是伟人说的#xff0c;不管谁说的#xff0c;这句话是正确的)#xff0c;有些东西看着简单#xff0c;张口就来#xff0c;但很有可能是错的。我个人的经验是#xff0c;aop、过滤器、拦截器的实现方式很简单…前言伟人曾经说过没有调查就没有发言权(好像是伟人说的不管谁说的这句话是正确的)有些东西看着简单张口就来但很有可能是错的。我个人的经验是aop、过滤器、拦截器的实现方式很简单一学就会不用就忘忘了再学学了再忘如此循环内耗何必呢因此如果你和我一样有一颗强烈的好奇之心那么不管多简单动手敲起来吧温故而知新呢。功能特性对比过滤器过滤器Filter是与servlet相关联的一个接口主要适用于java web项目中依赖于Servlet容器是利用java的回调机制来实现过滤拦截来自浏览器端的http请求可以拦截到访问URL对应的方法的请求和响应ServletRequest request, ServletResponse response但是不能对请求和响应信息中的值进行修改一般用于设置字符编码、鉴权操作等如果想要做到更细一点的类和方法或者是在非servlet环境中使用则是做不到的所以凡是依赖Servlet容器的环境过滤器都可以使用如Struts2、SpringMVC;拦截器拦截器的HandlerInterceptor使用范围以及功能和过滤器很类似但是也是有区别的。首先拦截器HandlerInterceptor适用于SpringMVC中因为HandlerInterceptor接口是SpringMVC相关的一个接口而实现java Web项目SpringMVC是目前的首选选项但不是唯一选项还有struts2等因此如果是非SpingMVC的项目HandlerInterceptor无法使用的其次和过滤器一样拦截器可以拦截到访问URL对应的方法的请求和响应ServletRequest request, ServletResponse response但是不能对请求和响应信息中的值进行修改一般用于设置字符编码、鉴权操作等如果想要做到更细一点的类和方法或者是在非servlet环境中使用则也是是做不到的总之过滤器和拦截器的功能很类似但是拦截器的适用范围比过滤器更小Spring AOPAOP Aspect Orient Programming,直译过来就是 面向切面编程,AOP 是一种编程思想是面向对象编程OOP的一种补充。面向切面编程可以实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术AOP可以拦截指定的方法并且对方法增强而且无需侵入到业务代码中使业务与非业务处理逻辑分离而SpringAOP则是AOP的一种具体实现Spring内部对SpringAOP的应用最经典的场景就是Spring的事务通过事务注解的配置Spring会自动在业务方法中开启、提交业务并且在业务处理失败时执行相应的回滚策略与过滤器、拦截器相比更加重要的是其适用范围不再局限于SpringMVC项目可以在任意一层定义一个切点织入相应的操作并且还可以改变返回值代码实现过滤器实现传送门Springboot项目快速实现过滤器功能拦截器实现传送门Springboo项目快速实现拦截器功能AOP实现传送门Springboot项目快速实现Aop功能实现示例源代码地址https://gitcode.net/fox9916/fanfu-web.gitbranch:Aopfilterinterceptor在实现示例中主要的过滤器实现类、拦截器实现类和AOP实现类与涉及到的接口之间的关系如下验证结果匹配中同一个目标PersonController#getPerson()的情况下过滤器、拦截器、SpringAOP的执行优先级是过滤器拦截器SpringAOP执行顺序是先进后出工作原理从验证结果的输出日志中已经可以看到在匹配中同一目标时过滤器、拦截器、SpringAOP的执行优先级是过滤器拦截器SpringAOP执行顺序是先进后出具体的不同则体现在以下几个方面1、作用域不同过滤器依赖于servlet容器只能在 servlet容器web环境下使用对请求-响应入口处进行过滤拦截拦截器依赖于springMVC可以在SpringMVC项目中使用而SpringMVC的核心是DispatcherServlet而DispatcherServlet又属于Servlet的子类因此作用域和过滤器类似SpringAOP对作用域没有限制只要定义好切点可以在请求-响应的入口层controller层拦截处理也可以在请求的业务处理层service层拦截处理2、颗粒度的不同过滤器的控制颗粒度比较粗只能在doFilter()中对请求和响应进行过虑和拦截处理拦截器提供更精细颗粒度的控制有preHandle()、postHandle()、afterCompletion()可以在controller对请求处理之前、请求处理后、请求响应完毕织入一些业务操作SpringAOP提供了前置通知、后置通知、返回后通知、异常通知、环绕通知比拦截器更加精细化的颗粒度控制甚至可以修改返回值总结过滤器、拦截器、AOP本质上来讲都是面向切面编程的实践只是在功能特性、适用范围、实现细节上有一些区别。一般情况下过滤器能实现的功能拦截器也可以实现过滤器、拦截器可以实现的功能AOP也可以实现那么在业务开发过程中作选型的时候是不是直接用AOP就完了其实我认为不能这样还是需要根据具体的业务环境和技术环境进行选择杀鸡可必要用牛刀你说呢