一.Dubbo SPI 简介
SPI(Service Provider Interface)是服务发现机制,Dubbo没有使用jdk SPI而对其增强和扩展:
jdk SPI仅通过接口类名获取所有实现,但是Duboo SPI可以根据接口类名和key值获取具体一个实现
可以对扩展类实例的属性进行依赖注入,即IOC
可以采用装饰器模式实现AOP功能
你可以发现Dubbo的源码中有很多地方都用到了@SPI注解,例如:Protocol(通信协议),LoadBalance(负载均衡)等。基于Dubbo SPI,我们可以非常容易的进行拓展。ExtensionLoader是扩展点核心类,用于载入Dubbo中各种可配置的组件,比如刚刚说的Protocol和LoadBalance等。那么接下来我们看一下Dubbo SPI的示例
二.Dubbo SPI 示例
比如现在我们要拓展Protocol这个组件,新建一个DefineProtocol类并修改默认端口为8888:
1 /** 2 * @author GrimMjx 3 */ 4 public class DefineProtocol implements Protocol { 5 @Override 6 public int getDefaultPort() { 7 return 8888; 8 } 9 10 @Override 11 public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException { 12 return null; 13 } 14 15 @Override 16 public <T> Invoker<T> refer(Class<T> aClass, URL url) throws RpcException { 17 return null; 18 } 19 20 @Override 21 public void destroy() { 22 23 } 24 }