ServiceGlue
基于ByteX开发的服务发现框架
Install / Use
/learn @AmatorLee/ServiceGlueREADME
ServiceGlue
基于ByteX开发的服务发现框架
背景
在规模较大的项目中,组件化进程不断推进或完善,各个模块实现层不再相互依赖,访问、调用实现层参数、方法则不能直接联通,因此需要注入公共的工具类
- 静态注入 新建一个base模块,依赖所有接口层及实现层,然后静态注入
- 动态注入 利用app构建过程中,.class->dex前的transform进行字节码注入
ServiceGlue采用第二种方式,动态注入,构造实现类实例
使用
接口层:对需要对外暴露的接口标注@ServiceInterface注解
@ServiceInterface
public interface ITestInterface {
void log();
}
实现层:对实现接口层的类标注@ServiceImpl注解
@ServiceImpl
public class TestImpl implements ITestInterface {
@Override
public void log() {
Log.e(TestImpl.class.getSimpleName(),"try log");
}
}
如果没有对外暴露public的构造方法,如单例,则对此方法标注@InstanceProvider注解
@ServiceImpl
public class TestImpl1 implements ITestInterface1 {
private TestImpl1() {
}
@InstanceProvider
public static TestImpl1 getInstance() {
return new TestImpl1();
}
@Override
public void log() {
Log.e(TestImpl1.class.getSimpleName(), "try log");
}
}
如果项目中有使用插件开发,插件中的实现类通过@PluginServiceImpl注解
@PluginServiceImpl //插件实现类添加此注解
public class TestImpl2 implements ITestInterface2 {
@Override
public void log() {
Log.e(TestImpl2.class.getSimpleName(),"try Log");
}
}
注意:PluginServiceImpl会额外生成.class文件用于插件构建实例,宿主中慎用,防止影响包体积
在使用地方进行调用即可
ServiceGlue.getService(ITestInterface1.class)
.log();
推荐将接口类声明为属性同时使用@ServiceInject进行实例注入,避免大量手动调用ServiceGlue.getSerivce(XXX.class);的情况
class Test {
@ServiceInject
private ITestInterface iTestInterface ;
@ServiceInject
private ITestInterface1 iTestInterface1 ;
}
编译过程中已动态注入,直接使用即可
iTestInterface.log();
注意:因宿主构建无法对插件的实现类进行注入,在宿主中调用插件的服务必须进行判空,防止空指针
优势
- 无需关心注入过程,使用简单
- 无APT,缩短编译耗时
- 无缝兼容插件开发
- 成员属性自动注入,使用便捷
在项目中引入
- 在Project的build.gradle文件中添加
//maven依赖
allprojects {
repositories {
maven {
url 'https://dl.bintray.com/liguangquan/maven'
}
}
}
dependencies {
classpath 'me.amator.sdk:serviceGlue-plugin:${last_version}'
}
- 在Application、插件、library的build.gradle添加
apply plugin: 'service-glue'
ServiceGlue {
enable true
enableInDebug true
}
dependencise{
implementation 'me.amator.sdk:serviceGlue-plugin:${last_version}'
}
版本更新
last_version=0.0.4 changeLog:fix bug
last_version=0.0.3 changeLog:支持成员属性注入
last_version=0.0.2 changeLog:支持插件开发
last_version=0.0.1 changeLog: 服务发现框架
TODO
- ~兼容插件开发~
- ~成员属性注入~
- 增量编译
感谢
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
