引言:
在日常的开发中会遇到项目比较大,会根据代码功能进行对代码拆分成多个Module。拆分后遇到Module相互调用的问题采取的办法一般如下:
- Module相互引用,直接进行调用。
- 使用公共module申明接口,其它module分别进行实现和接口调用。然后在主Module中设置接口的实现。
- 后来发现ARouter中也有与本文相似思路的实现,但是一直没有用过(此文章献丑了,考虑自己已经写完了,而且使用起来还是有点差别的,这个插件还是发出来吧)
写这个插件的思路主要是想到了java的SPI(Service Provider Interface),考虑如何让META-INF/services下的配置文件自动生成(AutoService)、单例的接口实现如何获取,到最后使用Transform提前注册避免在运行时通过META-INF/services构建影响性能。
插件:
ServiceProviderBuilder
插件的使用在github中有详细的介绍。不在此处多言。主要介绍一下使用插件的优点:
- 支持接口与实现的指定,使用
@ServiceProvider
和@ServiceImplementation
分别标记接口和需要被构建的实现 - 支持一个接口多实现
- 支持一个实现有多个多接口
- 可以加载构造私有的单例实现,使用
@BuildService
标记单例方法
欢迎使用和提问