我正在寻找一种惯用的方法来定义Clojure中可以由外部"服务提供商"实现的接口.我的应用程序将在运行时定位并实例化服务提供者模块,并将某些职责委托给它.
例如,假设我正在实现RPC机制,并且我希望允许在配置时注入自定义中间件.该中间件可以预处理消息,丢弃消息,使用日志包装消息处理程序等.
我知道有几种方法可以做到这一点,如果我回到Java反射,但觉得在Clojure中实现它将有助于我的理解.
(注意,我在这里一般意义上使用SPI,而不是特别指它在JAR文件规范中定义的方式)
谢谢
clojure service-provider
clojure ×1
service-provider ×1