今日闲来无事突发奇想,平时写Filter都想着把谁放谁前面,谁放谁后面,那么如果他俩撞了会咋样呢?
ps: 先说一下正常的执行顺序 负数优先级大于正数,说白了就是数轴的执行顺序。
说干就开干 =.= 随便新建个Springboot项目
新建两个过滤器
第一个
@Component
public class FirstFilter implements Filter, Ordered {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行了=====》"+ this.getClass().getSimpleName());
filterChain.doFilter(servletRequest,servletResponse);
}
//这么写和@Order(222)效果一样
@Override
public int getOrder() {
return 222;
}
}
第二个
@Component
public class SecondFilter implements Filter, Ordered {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行了=====》"+ this.getClass().getSimpleName());
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public int getOrder() {
return 222;
}
}
然后再写个测试的Controller来访问
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public Object test() {
return "66666666";
}
}
此时访问controller,那么你就会看到输出:
执行了=====》FirstFilter
执行了=====》SecondFilter
都是222的order 为啥就First的先执行? 仅仅是因为名字?
所以为了验证猜想,我把FirstFilter
类改名为ZFirstFilter
,(因为Z在S后面嘛),然后运行,你就会发现输出变成了
执行了=====》SecondFilter
执行了=====》ZFirstFilter
这。。。。。所以得出结论,给过滤器设置相同的order顺序,会按照字母顺序执行。
哈哈,万一字母都是A开头呢?往后推着看呗。
真随意,改天闲下来看看@Order的源码再记录吧,溜了溜了。