过滤器和拦截器之间的区别:
- 过滤器初始化在拦截器之前,在IOC容器bean节点初始化之后。
- 在一个请求生命周期中过滤器只被调用一次,拦截器可被调用多次。
- 过滤器在项目启动时初始化一次,拦截器是通过bean节点初始化在容器中。
创建项目对比拦截器与过滤器区别:
过滤器:
1 /** 2 * @filename MyFilter.Java 3 * @desc 过滤器测试 4 * @blog http://www.cnblogs.com/goodcheap 5 * @author Chinda Wang 6 * @create 2018-01-02 7:45 7 * @version v1.0 8 * @copyright Copyright © 2017 达华信息科技有限公司 版权所有 9 * @modifyhistory 2018-01-02 7:45 10 * @modifyauthor Chinda Wang 11 * @modifydesc 12 */ 13 package com.itdoc.filter; 14 15 import com.itdoc.service.MyService; 16 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.stereotype.Component; 18 19 import javax.servlet.*; 20 import java.io.IOException; 21 22 23 /** 24 * @desc 过滤器测试 25 * @author Chinda Wang 26 * @create 2018-01-02 7:45 27 */ 28 @Component 29 public class MyFilter implements Filter { 30 31 @Autowired 32 private MyService myService; 33 34 /** 35 * Filter 初始化 36 * @param filterConfig 37 * @throws ServletException 38 */ 39 @Override 40 public void init(FilterConfig filterConfig) throws ServletException { 41 System.out.println("初始化Filter!!!"); 42 myService.getFilterInit(); 43 } 44 45 @Override 46 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 47 System.out.println("Filter doFilter方法!!!"); 48 System.out.println("Filter调用chain.doFilter方法之前!!!"); 49 myService.getFilterDoFilter("之前"); 50 chain.doFilter(request, response); 51 myService.getFilterDoFilter("之后"); 52 System.out.println("Filter调用chain.doFilter方法之后!!!"); 53 } 54 55 @Override 56 public void destroy() { 57 System.out.println("销毁Filter!!"); 58 myService.getFilterDestroy(); 59 } 60 }