# 《高性能Polaris网关》通用过滤器-第06节:网关过滤器适配自定义SPI提高扩展性
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本节重点:对高性能Polaris网关的过滤器适配自定义SPI并提升整体扩展性,从全局角度掌握高性能Polaris构建请求与响应信息的核心流程和代码设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
在高性能网关中,为了更好的扩展整体过滤器的功能,采用SPI的方式将过滤器动态加载的过滤器链中。之前基于JSK自带的SPI初步实现了动态加载过滤器的功能,但扩展性不高,接下来,优化过滤器的加载规则,使其适配自定义SPI,以提升更高的扩展性。
# 一、前言
在之前的文章中,我们已经对网关的顶级核心过滤器接口进行了设计和实现,也进一步封装了请求和响应的模型,基本上完成了过滤器的整体代码框架,并对网关过滤器的两大顶级抽象类进行了设计和实现,也对网关通用过滤器链进行了设计和实现。同时,对网关过滤器通用工厂类进行了设计和实现。接下来,为了进一步提升过滤器的扩展性,对过滤器进行优化,使其适配自定义SPI。
# 二、本节诉求
对高性能Polaris网关的过滤器适配自定义SPI并提升整体扩展性,从全局角度掌握高性能Polaris构建请求与响应信息的核心流程和代码设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
# 三、核心类设计
本节,对网关的过滤器适配自定义SPI并提升整体扩展性进行设计和封装实现,整体类图如图6-1所示。

可以看到,在类图上总体新增了@SPI注解和@SPIClass注解,@SPI注解标注到接口上,标识当前接口的具体实现类会根据自定义SPI进行扩展。@SPIClass注解标注到具体实现类上,标识这个类是通过SPI动态加载的。
注意:这里重点给大家展示过滤器适配自定义SPI的核心类,其他代码的实现细节,例如自定义SPI的具体实现等,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。
# 四、编码实现
本节,同样重点给大家展示过滤器适配自定义SPI的核心类,其他代码的实现细节,例如自定义SPI的具体实现等,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。
(1)改造项目工程
在polaris-filter工程下新建polaris-filter-api工程,将polaris-filter工程下的类迁移到polaris-filter-api工程下。
(2)实现@SPI注解
@SPI注解标注到接口上,标识当前接口的具体实现类会根据自定义SPI进行扩展。
源码详见:polaris-spi工程下的io.binghe.polaris.spi.annotation.SPI。
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码