接口疑问的追问?

来源:16-6 登录token超时优化

慕神4535282

2020-11-04

老师,下午好,请教一个问题,
原贴在此:
https://coding.imooc.com/learn/questiondetail/210471.html

public class LoginAdminGatewayFilter implements GatewayFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ....
        if (token == null || token.isEmpty()) {
            LOG.info("token为空,请求被拦截");
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        ...
    }
}

看了老师你的回答,我有个疑问:正如你之前告诉我的那样,LoginAdminGatewayFilter 只需要 implements 接口GatewayFilter, Ordered即可,不用手动写代码来调用filter()方法,因为这是写自定义过滤器的规范。而你在https://coding.imooc.com/learn/questiondetail/210471.html,所做的回答是:exchange.getResponse() 的返回值 是interface ServerHttpResponse,这个接口不用 implements ,只需调用接口内的方法即可。

可以看到,两种处理方法刚好相反。

所以我现在很困惑,对于一个interface, 不知道什么时候要用自定义过滤器的规范(只需implements,不用手动调用其方法)来处理,什么时候要用面向接口编程(不需implements,而需手动调用其方法)来处理。

谢谢老师解答!!!

写回答

1回答

甲蛙

2020-11-05

没太明白的问题所在,说一下我的理解

LoginAdminGatewayFilter,这个是我们自己写的类,是要给框架用的,我们不需要关心框架是怎么用的,当然有兴趣的可以去研究源码。

而像Logger,是我们直接用框架提供的接口,而不需要关心他内部的实现,把它当成一个工具类。

两者没什么关联

0
1
慕神4535282
非常感谢!
2020-11-05
共1条回复

Spring Cloud+ Vue前后端分离开发企业级在线视频系统

全网稀缺课程 市场热门项目+主流框架 一课掌握前后端技术

1743 学习 · 1697 问题

查看课程