引言:
在日常的開發中會遇到項目比較大,會根據代碼功能進行對代碼拆分成多個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
標記單例方法
歡迎使用和提問