全栈开发知识库

Hilt

Hilt是Google基于Dagger2封装的Android专用依赖注入框架

  • Dagger2的痛点: 需要手动定义Component、SubComponent,模板代码多且复杂
  • Hilt的价值: 预定义了与Android生命周期绑定的标准Component,开箱即用。

核心原理: 编译期代码生成

Hilt的本质是注解处理器,在编译阶段扫描注解,自动生成Dagger的模板代码。

// 你写的代码
class UserRepository @Inject constructor(
    private val api: ApiService
)

// Hilt 编译后自动生成(伪代码,实际在 build/generated 目录)
class UserRepository_Factory : Factory<UserRepository> {
    private val apiProvider: Provider<ApiService>

    constructor(apiProvider: Provider<ApiService>) {
        this.apiProvider = apiProvider
    }

    override fun get(): UserRepository {
        return UserRepository(apiProvider.get())
    }

    companion object {
        fun create(apiProvider: Provider<ApiService>) =
            UserRepository_Factory(apiProvider)
    }
}

你写的注解 -> 编译器生成工厂类 -> 运行时Hilt调用工厂类创建对象并注入。

零反射,全部在编译期完成,这是Hilt/Dagger性能优于其他DI框架的根本原因。