Dubbo作为开源框架,必须要提供很多的可扩展点。Dubbo的扩展点加载采用了微核心插件式的开发模式,它是比较符合OCP原则。
微核心
由一个插件生命周期管理容器,构成微核心, 核心不包括任何功能,这样可以确保所有功能都能被替换,并且框架实现的功能,扩展者也一定能做到,以保证平等对待第三方。因此Dubbo框架自身的功能也采用了插件的方式来实现,不采用任何硬编码。
通常微核心都会采用Factory,IoC,OSGi等方式管理插件生命周期,为了减少对spring的依赖,Dubbo放弃使用spring的IoC容器,而采用了Factory方式来管理插件。
JDK SPI机制
JDK标准的SPI(Service Provider Interface)扩展点发现机制,即我们定义了服务接口标准,厂商提供具体的接口实现,JDK通过ServiceLoader类实现SPI机制的服务查找功能,下面是简单示例:
首先定义接口
package com.example;
public interface DemoService{
String sayHello();
}
ServiceLoader会遍历所有jar查找META-INF/services/com.example.DemoService文件
A厂商实现
package com.a.example;
public class DemoServiceAImpl implements DemoService{
public String sayHello(){
return "hello 我是厂商A";
}
}
在A厂商提供的jar包中的META-INF/services/com.example.DemoService文件内容为:com.a.example.DemoServiceAImpl
B厂商实现