接口疑问?

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

慕神4535282

2020-11-04

老师,下午好,请教一个问题,

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();
        }
        ...
    }
}

请问一下老师,这里 exchange.getResponse() 的返回值 是interface ServerHttpResponse类型,为什么可以 .setStatusCode(HttpStatus.UNAUTHORIZED); 呢?

我知道老师你已经答过了,我也按照你的方法做了,还是不能解答我的疑问。

我的疑问是 exchange.getResponse() 的返回值 是interface, 而不是 class,这时是没办法实例化一个 interface的呀,怎么可以调用它的setStatusCode()呢, setStatusCode()方法还没有实现呀?

谢谢老师解答 !

写回答

1回答

甲蛙

2020-11-04

这个接口有相应的实现类,具体可以去研究它的源码。实际执行是实现类来执行。

面向接口编程。有很多类似的例子,比如打日志,我们所有LOG.info,你点进info,可以看到它也是个接口,slf4j实际就是定义了一套接口,内部的实现可以配置成logback或log4j

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

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

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

1743 学习 · 1698 问题

查看课程