【Spring】@Order(100)和@Order(100)的两个Filter谁会先执行呢?

今日闲来无事突发奇想,平时写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的源码再记录吧,溜了溜了。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值