springmvc中有两种很普遍的实现:
1.过滤器(Filter)
2.拦截器(Interceptor)
过滤器和拦截器,功能上类似,但具体实现上差别很大。
Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用,拦截器是AOP思想的具体应用。
Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理的方式来执行。
Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
其他:
拦截器和过滤器的区别:
过滤器:任何java web工程都可以使用(因此在web.xml中配置)。在Url-pattern中配置了/*后,可以对所有要访问的资源进行拦截
拦截器:拦截器是Spring MVC框架中的,只有使用Spring MVC框架的工程才能使用(在applicationContext下配置)拦截器只会拦