目录
[2、与其他 DI 框架对比](#2、与其他 DI 框架对比)
[1. 添加仓库](#1. 添加仓库)
[2. 模块依赖](#2. 模块依赖)
[1️⃣ 初始化框架](#1️⃣ 初始化框架)
[2️⃣ 定义服务接口](#2️⃣ 定义服务接口)
[3️⃣ 标注实现类](#3️⃣ 标注实现类)
[4️⃣ 注入依赖](#4️⃣ 注入依赖)
[5️⃣ 手动获取服务](#5️⃣ 手动获取服务)
[1、@Service 属性说明](#1、@Service 属性说明)
[2、@Inject 属性说明](#2、@Inject 属性说明)
一、框架定位
一个轻量级 Android DI(依赖注入)框架,基于注解处理器(APT)在编译期自动生成服务注册与注入代码,零反射、零运行时开销。
- 框架定位和原理(编译期 APT、零反射)
- 从 JitPack 安装(Gradle 配置、Java/Kotlin 区别)
- 5 步上手流程(定义接口 → 标注 @Service → 初始化 → @Inject 注入 → 手动获取)
1、功能特性
- 编译期代码生成 :基于
@Service注解,编译时自动生成服务注册表,无运行时反射 - 接口驱动:自动识别实现类所实现的接口,以接口名称作为服务标识
- 字段注入 :通过
@Inject注解自动注入依赖 - 服务查找:支持按名称手动获取服务实例
- 线程安全:初始化过程异步执行,注入时自动等待就绪
- 调试日志:内置日志开关,方便排查问题
2、与其他 DI 框架对比
| 特性 | AutoService | Dagger/Hilt | Koin |
|---|---|---|---|
| 工作原理 | 编译期生成 | 编译期生成 | 运行时反射 |
| 启动性能影响 | ✅ 零影响 | ⚠️ 轻微 | ❌ 显著 |
| Kotlin 兼容性 | ✅ 100% | ✅ 100% | ✅ 100% |
| 多模块支持 | ✅ | ✅ | ✅ |
| 学习曲线 | ⭐️⭐️ | ⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️ |
二、安装配置
1. 添加仓库
根据 Gradle 版本选择配置方式:
Android Gradle Plugin < 7.1.0
根目录 build.gradle:
Groovy
allprojects {
repositories {
maven { url 'https://jitpack.io' }
mavenCentral()
google()
}
}
Android Gradle Plugin ≥ 7.1.0
settings.gradle:
Groovy
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://jitpack.io' }
mavenCentral()
google()
}
}
2. 模块依赖
最新可用的版本:

Groovy
dependencies {
implementation 'com.gitee.ym521.autoservice:di-api:latest-version'
// Java项目
annotationProcessor 'com.gitee.ym521.autoservice:di-compiler:latest-version'
// Kotlin项目
kapt 'com.gitee.ym521.autoservice:di-compiler:latest-version'
}
三、五步快速集成
1️⃣ 初始化框架
Kotlin
class App : Application() {
override fun onCreate() {
super.onCreate()
AutoService.init(this).debug(true) // 可选调试日志
}
}
2️⃣ 定义服务接口
Kotlin
interface PaymentService {
fun process(amount: Double)
}
3️⃣ 标注实现类
Kotlin
@Service // 默认单例模式
class AlipayServiceImpl : PaymentService {
override fun process(amount: Double) {
// 支付宝支付逻辑
}
}
// 自定义服务名+非单例
@Service(name = "WeChatPay", singleton = false)
class WeChatPayImpl : PaymentService {...}
4️⃣ 注入依赖
Kotlin
abstract class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AutoService.inject(this) // 自动注入所有 @Inject 字段
}
}
class CheckoutActivity : BaseActivity() {
@Inject // 按接口类型注入
lateinit var defaultPayment: PaymentService
@Inject(name = "WeChatPay") // 按名称注入
lateinit var wechatPayment: PaymentService
}
5️⃣ 手动获取服务
Kotlin
val paymentService = AutoService.get(PaymentService::class.java)
val customService = AutoService.get("WeChatPay", PaymentService::class.java)
四、框架特别说明
1、@Service 属性说明
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
String | "" |
自定义服务名称,为空时自动使用接口简单名 |
singleton |
boolean | true |
true=单例,false=非单例(每次获取创建新实例) |
注意 :Kotlin
object类即使标记为@Service(singleton = false),也会按单例处理------这是 Kotlin 语言特性决定的,无法创建额外实例。
2、@Inject 属性说明
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
String | "" |
自定义服务名称,为空时自动使用字段类型或方法参数类型的简单名 |
3、编译期优化机制
| 注解处理器 | 生成代码 | 优化效果 |
|---|---|---|
ServiceProcessor |
ServiceRegistry_xxx |
编译期确定实现类,避免运行时扫描 |
InjectProcessor |
InjectHelper_* |
注入操作零反射调用 |
4、编译期优化说明
AutoService 在编译期做了两件事来消除运行时反射:
| 阶段 | 处理器 | 生成产物 | 效果 |
|---|---|---|---|
| @Service | ServiceProcessor |
ServiceRegistry_xxx |
编译期确定服务实现类,避免运行时扫描 |
| @Inject | InjectProcessor |
InjectRegistry_xxx + InjectHelper_* |
编译期预生成 InjectMeta,inject() 时零反射扫描 |
即使依赖的第三方库未使用本框架,运行时也会优雅降级为反射扫描,不影响功能。
通过编译期代码生成和明确的服务注册机制,该框架既保持了依赖注入的灵活性,又规避了运行时反射的性能陷阱。其清晰的接口驱动设计和线程安全的初始化流程,使得组件间解耦更加优雅高效。