JAVA SPI扩展
在看dubbo的SPI扩展时,觉得很疑惑,就把java的spi扩展翻出来看了一下。
java的链接为https://docs.oracle.com/javase/tutorial/ext/basics/spi.html#define-the-service-provider-interface
1.SPI是什么
SPI全称为service provider interface,(应用提供接口??whatever),就是一套应用扩展的机制。完全可以理解为一套用于扩展应用的模式;
2.SPI的类图:
3. 解决什么问题:可以不停的扩展abstractClass,而不用修改其他的代码,对于应用程序来说,需要修改的就只是输入参数。
为什么不直接在应用程序中autowire实际的具体类?(这个我也不知道,有理解的可以讨论)
4. 整个模式最重要的就是ServiceLoader(在dubbo 中为ExtensionLoader)
ServiceLoader的主要工作简单说就是读取特定目录下的文件(META-INF/service)中的配置,然后缓存具体的类。
最后应用程序在使用ClassService.getDefinition时,可以遍历ServiceLoader实现。