在上面这篇中我们已经介绍过了 Dubbo 的 SPI 和 JDK 的SPI 的机制的区别,但是还是有人问,为啥 Dubbo 不直接用 JDK 的SPI 的机制?
其实,已经讲过了,只不过不够那么直接,其实不用的原因,就是 JDK 的SPI 存在的那些缺点,我从上文中总结出几个供大家参考:
JDK SPI 机制虽然简单易用,但在灵活性和扩展性上有所不足。比如说JDK的 SPI 只能加载所有实现类的实例,并不能对实例进行过滤或排序,缺乏对加载顺序、优先级等高级特性的支持。Dubbo 的 SPI 支持扩展点自动激活功能。可以通过键值对的方式在配置文件中指定条件,当满足条件时自动选择对应的实现。
JDK SPI 机制在加载实现类时会扫描所有的服务提供者配置文件,这会导致性能问题。特别是在服务提供者较多时,这种扫描和加载机制会带来额外的性能开销。
Dubbo 提供了一种更灵活的依赖注入机制,可以在运行时根据需要注入不同的实现。Dubbo 的扩展机制允许开发者在代码中动态指定和注入扩展点,而不必在编译时确定所有的实现类。这种方式相比 JDK SPI 更加灵活,便于管理和维护。
除此之外,Dubbo 自定义的 SPI 机制还提供了一些高级功能。比如对 AOP 的支持等。