dubbo-源碼閱讀之javaspi
阿新 • • 發佈:2018-07-31
自己實現 XML 框架 public 發現 同名 res 相關 對象創建
dubbo可擴展的點的類的對象創建 都是用類似javaspi的思想來做的。所以看後面代碼 先熟悉一下java的SPI實現
如ServicesConfig的代碼
private static final Protocol protocol = (Protocol)ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
JAVASPI的作用
服務(接口實現類)的自動發現。我們定義好一組接口標準。而具體實現調用者根據自身需求自己實現
JavaSPI簡單使用
我們模擬我們做了一個框架(jar) 框架的正常運行需要相關配置。配置加載方式由使用者來實現
1.定義接口
/** * 加載配置文件的句柄 */ public interface LoadConfigHandle { public String load(); }
2.定義實現類
public class HttpLoadConfigHandle implements LoadConfigHandle { public String load() { System.out.println("正在用http請求加載配置文件數據"); return ""; } }
public classXmlLoadConfigHandle implements LoadConfigHandle { public String load() { System.out.println("正在加載配置文件xml"); return ""; } }
在resource創建META-INF文件夾,再創建一個與接口全名稱同名的文件。將實現類配置進去
com.liqiang.spi.XmlLoadConfigHandle
com.liqiang.spi.HttpLoadConfigHandle
3測試
publicstatic void main(String[] str) throws InterruptedException { ServiceLoader<LoadConfigHandle> serviceLoader = ServiceLoader.load(LoadConfigHandle.class); Iterator<LoadConfigHandle> iterator = serviceLoader.iterator(); while (iterator.hasNext()) { LoadConfigHandle loadConfigHandle = iterator.next(); loadConfigHandle.load(); } }
dubbo-源碼閱讀之javaspi