简易RPC框架-SPI
案例
我们所熟悉的jbdc是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,提供了一种基准,据此可以构建更高级的工具和接口。
如上图所示,任意的一个数据库厂商只要去实现jdbc的接口,就可以轻松的对接jbdc从而为应用开发人员所服务。
SPI
上面的jdbc的设计理念叫SPI,它的全名是Service Provider Interface。它的理念是对某类功能进行抽象,确保应用程序依赖抽象而不是具体的某种实现,通过配置服务实现者的方式来达到面向接口编程以及扩展的目的。比如我们项目中需要用到日志组件,有的项目喜欢logback,有的喜欢log4j,有的喜欢common-log等等,如果在项目中直接依赖这些日志接口,那么后续如果需要对日志组件重新选型,对现有项目的影响会非常大,所有后来就有了slfj,它抽象了日志接口但不包含任何的实现,具体实现全部依赖于不同的厂商。
传统的java spi一般做法是在resources/META-INF/services/目录下面创建一个以服务接口命名的文件,该文件内容就是实现该服务接口的具体实现类的完全限定名。当程序加载的时候,就能通过resources/META-INF/services/里的配置文件找到具体的实现类名,并加载实例化。 通过这个机制就能找到服务接口的实现类,而不需要再代码里写死。
java.util.ServiceLoader这个就是java spi中用来加载服务实现类的工具,本文不对它的具体用法做过多介绍。
主题:限流策略如何扩展
本文要讨论的问题是,rpc框架中的限流过滤器扩展问题(可参考之前的文章 :
文中代码是依赖上述项目的,如果有不明白的可下载源码
上一篇: 线程