Android笔记--Hilt

Hilt 是 Android 的依赖项注入库,可减少在项目中执行手动依赖项注入的样板代码。执行手动依赖项注入要求您手动构造每个类及其依赖项,并借助容器重复使用和管理依赖项。依赖注入的英文是Dependency Injection,简称DI,简单说一个类中使用的依赖类不是类本身创建的,而是通过构造函数或者属性方法设置的,这种实现方式就称为依赖注入。

Hilt优点: 使代码解耦,便于复用,重构和测试 缺点:1 有些情形gradle编译不通过,或编译时间较长 2 不便于他人快速接手

用法如下:

project/build.gradle

Kotlin 复制代码
 id("com.google.dagger.hilt.android") version "2.44" apply false

app/build.gradle

Kotlin 复制代码
plugins {
    xxx
    id 'kotlin-kapt'
    id 'com.google.dagger.hilt.android'
}

dependencies {

    implementation("com.google.dagger:hilt-android:2.44")
    kapt("com.google.dagger:hilt-android-compiler:2.44")
}
Kotlin 复制代码
@HiltAndroidApp
class HiltApp :Application() {
}
Kotlin 复制代码
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var hiltPlay: HiltPlay

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun click(v: View) {
        hiltPlay.play()
    }

}
class HiltPlay @Inject constructor() {
    fun play() {
        Log.d("HiltPlay","play hilt")
    }
}

点击后输出:

Kotlin 复制代码
2023-08-29 22:44:35.411 29864-29864 HiltPlay                com.kewpie.hiltplay                  D  play hilt

使用@HiltAndroidApp注解

新建继承自Application的类并添加注解@HiltAndroidApp,触发 Hilt 的代码生成,其中包括可以使用依赖项注入的应用基类。应用容器是应用的父容器,这意味着其他容器可以访问其提供的依赖项。

使用@AndroidEntryPoint将依赖注入Android类。

在 Application类中设置了Hilt且有了应用级组件后,Hilt 可以为带有 @AndroidEntryPoint 注解的其他 Android 类提供依赖项。

@Inject 注解让 Hilt 注入不同类型的实例。其实就是声明变量的时候用上这个注解

常见的依赖注入方式有:

方式1构造方法注入:

优点:在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要其他那些类才能工作。一旦对象初始化成功了,这个对象的状态肯定是正确的。

缺点:造成构造函数会有很多参数。

方式2 方法参数注入: 创建对象后,通过自动调用某个方法来注入依赖。

优点:比较灵活。

缺点:新加入依赖时会破坏原有的方法签名,如果这个方法已经被其他很多模块用到就很麻烦,得需大量修改;与构造方法注入一样,会有很多参数。

方式3 Set方法注入:

优点:在对象的整个生命周期内,可以随时动态的改变依赖,非常灵活。

缺点:对象在创建后,不直观,无法清晰地表示哪些属性是必须的。

相关推荐
做cv的小昊5 小时前
【TJU】研究生应用统计学课程笔记(1)——第一章 数理统计的基本知识(1.1 数理统计的基本内容、1.2 数理统计的基本概念)
笔记·线性代数·考研·数学建模·ai·矩阵·概率论
黄林晴5 小时前
Android 侧载新规:名义开放,实则锁死——你等得起一天吗?
android
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2026.04.13 题目:1848.到目标元素的最小距离
笔记·算法·leetcode
学而要时习5 小时前
从“推理”回归“控制”:通过经典强化学习透视AI大语言模型的逻辑底层
android·数据挖掘·回归
qingwufeiyang_5305 小时前
Mybatis学习笔记-1-快速入门
笔记·学习·mybatis
很小心的小新5 小时前
大模型应用开发笔记
人工智能·笔记·langchain·大模型
Kapaseker5 小时前
让你的 App 成为 AI 的一环
android·kotlin
Xpower 175 小时前
算法学习笔记 Day 1:迁移学习与域自适应(DANN/CORAL)
笔记·学习·算法
空中海5 小时前
7.3 优化实践
android·flutter
后季暖5 小时前
agent学习笔记4
笔记·学习