SPI机制

SPI机制
实现模块间通信,比如运营模块aar调用订单模块中的数据,实现模块间解耦
在运行期间将接口转换为实现类,达到模块间调用

variant.javaCompile.classpath包含所有的class文件和第三方的jar包

任务运行在javaCompileTask之后,
1.自定义Gradle插件,使用javassit扫描带有注解@ServiceProvider修饰的接口实现类,建立接口和实现类的映射关系
2.使用javapot生成接口和实现类映射关系的java文件ServiceRegistry,然后编译这个java文件
3.在模块中调用ServiceLoader.load(ITest.Class)获取接口实现类进行调用

ServiceLoader<S> implements Iterable<S>

ServiceLoader.load(ITest.Class) -> Class TestClass= ServiceRegistry.get(ITest.Class)->获取TestClass.newInstance();
就是说服务调用的时候才创建接口实例。

ServiceRegistry内部维护了集合
HashMap<ITest.Class,Set<ITest.Class的子类>> map;//接口类和实现类的Class字节码映射表
一个接口类可以有多个实现类

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • SPI:由于业务模块进行了组件拆分,开发了基于SPI组件通信方式,用在模块间降低耦合,解决业务模块的通信问题。可以...
    ModestStorm阅读 304评论 0 0
  • 概述   在某些时候我们可以通过在软件上游提供服务接口,无需在意接口的实现逻辑,全部交由扩展程序进行实现,上游只需...
    ruoshy阅读 693评论 0 6
  • 本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参...
    简祥阅读 1,201评论 0 0
  • 写在前面 SPI机制能够非常方便的为某个接口动态指定其实现类,在某种程度上,这也是某些框架具有高度可扩展性的基础。...
    冰河团队阅读 481评论 0 1
  • 本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参...
    caison阅读 126,678评论 25 156

友情链接更多精彩内容