JDK 的 SPI 机制
1、META-INF/services/org.speed.dubbo.spi.service.RpcService
文件的名称是接口的名称,里面的内容是接口实现类
2、ServiceLoader 加载 META-INF/services 文件全部反射实例化
缺点:
1、读取到文件后全部实例化,没有使用缓存
思考:类加载器
dubbo 的 SPI 机制
①:META-INF/services/org.speed.dubbo.spi.service.RpcService
文件的名称是接口的名称,里面的内容是key-value 值
pay=org.speed.dubbo.spi.service.PayRpcService,其中key为名称,value为实现类
②:实现类中有其他接口的实例变量,可以支持自动装入 (set 方法实现注入)
③:可以基于装饰方式实现代理,支持方法调用前、后拦截功能 (通过构造方法实现包装)
④:基于 URL 传递参数,通过参数生成代理类(通过字节码运行时生成类)
⑤:通过 RpcService order = ExtensionLoader.getExtensionLoader(RpcService.class).getExtension("order");
order 为查询的具体实现类,通常情况下这个名称为动态参数
AdaptiveClassCodeGenerator自动生成代理对象