【Android】Dagger和Hilt新手快速入门
什么是Dagger和Hilt
Dagger和Hilt都是安卓端的依赖注入框架
通过注解生成的方式,来取代手动创建对象的方式,来管理对象和其作用域
Dagger是Square公司出品的,而Hilt是由Google公司在Dagger的基础上优化而来
配置项目级别gradle
buildscript {repositories {mavenLocal()maven { url 'https://jitpack.io' }maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/repository/releases' }google()mavenCentral()}dependencies {classpath "com.android.tools.build:gradle:4.2.2"classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44'}}task clean(type: Delete) {delete rootProject.buildDir}
配置模块级别gradle
apply plugin: 'com.android.application'apply plugin: 'com.google.dagger.hilt.android'android {compileSdkVersion 30defaultConfig {applicationId "com.android.code"minSdkVersion 28targetSdkVersion 30versionCode 1versionName "1.1.1"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}buildFeatures {viewBinding truedataBinding true}}dependencies {api 'androidx.appcompat:appcompat:1.2.0'api 'com.google.android.material:material:1.3.0'api 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'//GSONapi 'com.google.code.gson:gson:2.8.7'//RxJava2api 'io.reactivex.rxjava2:rxjava:2.1.3'api 'io.reactivex.rxjava2:rxandroid:2.0.1'//Retrofit2api 'com.squareup.retrofit2:retrofit:2.3.0'api 'com.squareup.retrofit2:converter-gson:2.3.0'api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//Dagger2api 'org.glassfish:javax.annotation:10.0-b28'api "com.google.dagger:dagger:2.47"annotationProcessor "com.google.dagger:dagger-compiler:2.47"//Hiltapi 'com.google.dagger:hilt-android:2.44'annotationProcessor 'com.google.dagger:hilt-android-compiler:2.44'}
Hilt使用方式
由于Hilt是个Dagger基础上优化而来,因此使用方式比较相似
这里我们只讲解Hilt的使用方式,不再讲解Dagger
-
在Application上添加@HiltAndroidApp注解
-
在需要注入对象的组件,比如Activity或Fragment上,添加@AndroidEntryPoint注解
-
在需要注入对象的组件中,通过@Inject注解定义对象
-
在需要注入对象的默认构造方法上,添加@Inject注解
-
如果需要在某个作用域内共享对象,可以在类名上添加作用域注解,如@Singleton,@ActivityScoped,@ViewScoped等
-
如果希望注入对象,在其子组件中重新注入仍然生效,可以通过@Module注解定义一个专门的模块类
-
Module类需要通过@InstallIn指定安装到哪个组件中,Module类还需要提供一个方法,用于生产对象
-
Module类中用于生产对象的方法,需要添加作用域注解,和@Provides注解
-
Module类中,Method上的作用域注解,和InstallIn指定的组件,范围必须对应
Hilt参考代码
public class User extends BaseObservable {public String account;public String password;public String name;@Injectpublic User() {}@Overridepublic String toString() {return hashCode() + "";}}
@AndroidEntryPoint@SuppressWarnings("all")public class HomeActivity extends AppCompatActivity {@InjectUser user1;@InjectUser user2;}
@Module@InstallIn(ActivityComponent.class)public class UserModule {@ActivityScoped@Providespublic static User injectUser() {return new User();}}相关文章:
【Android】Dagger和Hilt新手快速入门
什么是Dagger和Hilt Dagger和Hilt都是安卓端的依赖注入框架 通过注解生成的方式,来取代手动创建对象的方式,来管理对象和其作用域 Dagger是Square公司出品的,而Hilt是由Google公司在Dagger的基础上优化而来 配置项目级别gradle buildscri…...
phpstorm 推荐插件
...
在进行自动化测试,遇到验证码的问题,怎么办?
1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 使用OCR自动化识别,一般识别率不是太高,处理一般简单验证码还是没问题 这里使用的是Tesseract-OCR,下载地址:https://github.com/A9T9/Free-Ocr-Windows-Desktop/releases 怎么使…...
C语言刷题训练DAY.6
1.进制AB 解题思路: 这里我们按照备注的提示,调整输入格式。 注意:%x是十六进制的数字 %o是八进制的数字 解题代码: #include<stdio.h> int main() {int a 0;int b 0;scanf("0x%x 0%o", &a, &b);pri…...
Java进阶篇--数据结构
目录 一.数组(Array): 1.1 特点: 1.2 基本操作: 1.3 使用数组的好处包括: 1.4 数组也有一些限制: 二.集合框架(Collections Framework): 2.1 列表…...
使用Facebook Pixel 埋点
在投放广告的时候,一般需要知道广告的产生的效益,所以就需要通过埋点去记录,这里使用到的是Facebook Pixel。 首先安装 npm install --save react-facebook-pixel然后进行封装了一下 /*** * param {事件类型默认为标准事件} eventType * pa…...
《Go 语言第一课》课程学习笔记(七)
代码块与作用域:如何保证变量不会被遮蔽? 什么是变量遮蔽呢?package mainimport ("fmt""github.com/google/uuid""github.com/sirupsen/logrus" )func main() {fmt.Println("hello, world")logrus.…...
Docker Nginx 运行前端项目
运行Nginx容器: docker run -itd --name nginx -p 80:80 nginx:latest--name是容器名称变量,nginx是创建容器的名称 copy 打包后的前端项目到容器的/usr/share/nginx目录下,拷贝后的目录一定要是:/usr/share/nginx/html否则无法运…...
企业权限管理(十)-用户详情
用户详情 UserController findById方法 Controller RequestMapping("/user") public class UserController {Autowiredprivate IUserService userService;//查询指定id的用户RequestMapping("/findById.do")public ModelAndView findById(String id) thro…...
Windows 11 家庭中文版找不到组策略文件gpedit.msc
最近因为调整日期问题需要用到组策略文件gpedit.msc,但是发现找不到文件 在按键盘 winR 打开运行界面输入 gpedit.msc 回车 Windows找不到文件’gpedit.msc’。请确定文件名是否正确后,再试-次。 检查电脑Windows系统版本 是 Windows 11 家庭中文版 果断早网上搜…...
vue3项目中structuredClone报错
报错:Failed to execute structuredClone on Window: #<Object> could not be cloned 代码: const formData ref({"content": "", // string"id": "", // string"title": "", // …...
Android漏洞之战——整体加壳原理和脱壳技巧详解
一、前言 为了帮助更加方便的进行漏洞挖掘工作,前面我们通过了几篇文章详解的给大家介绍了动态调试技术、过反调试技术、Hook技术、过反Hook技术、抓包技术等,掌握了这些可以很方便的开展App漏洞挖掘工作,而最后我们还需要掌握一定的脱壳技巧…...
网络
mcq Java 传输层:拆分和组装,完成端到端的消息传递,流量控制,差错控制等 网络层: 寻址、路由,复用,拥塞控制,完成源到宿的传递。 显然A选项是错误的,有流量控制的是传输层…...
一直往下get的map
一直往下get的map 文档:一直往下get的map.note 链接:http://note.youdao.com/noteshare?id7b6d315d86ce9e5f8d7cac9be8e924b8&sub95F9FFDA8EB447BBA506286E261F4C88 添加链接描述 package com.example.demo.entity;import org.bson.Document; impo…...
Azure如何调整虚拟机的大小
参考 https://blog.csdn.net/m0_48468018/article/details/132267096 创建虚拟机进入资源,点击大小选项,并对大小进行调整 点击如下图的cloud shell,进入Azure CLI,使用az vm resize 进行大小调整 命令中的g对应资源组,n对应虚拟机名称&am…...
stm32F103R6实现流水灯参考源代码
#include "main.h" #include "gpio.h" void SystemClock_Config(void); void sleep(int a) {int i0,j0;for(i0;i<a;i){for(j0;j<2000;j);}} 真正发挥效果的是这个main函数// int main(void) {int i0;HAL_Init();SystemClock_Config();MX_GPIO_Init()…...
blender 发射体粒子
发射体粒子的基础设置 选择需要添加粒子的物体,点击右侧粒子属性,在属性面板中,点击加号,物体表面会出现很多小点点,点击空格键,粒子会自动运动,像下雨一样; bender 粒子系统分为两…...
你真的掌握了 Python 的七种参数了吗?
不知道为什么网上总有人说 Python 的参数类型有 4 种啊,5 种啊,殊不知其实有 7 种。Python 的 7 种参数分别是 默认参数、位置参数、关键字参数、可变长位置参数、可变长关键字参数、仅位置参数 和 仅关键字参数。小白可能没见过“可变长参数”ÿ…...
人大进仓数据库ksql命令基础
测试环境信息: 系统为银河麒麟V10 数据库为Kingbase ES V8 数据库安装目录为/opt/Kingbase/ES/V8 ksql命令位于/opt/Kingbase/ES/V8/Server/bin下 使用--help获取帮助 续上图 1.查看数据库列表 ./ksql -U system -l 2.查看数据库版本 ./ksql -V 3.连接指定的数据库tes…...
网站上的网页,无法通过百度和bing搜索引擎来搜索
最近搜索某公司网站上的技术资料,百度/bing都不能工作,纳闷 看了下该网站的robots.txt 明白了 User-Agent: * Disallow: / 参考: 网站 robots.txt 文件配置方法,如何禁止搜索引擎收录指定网页内容 - 知乎...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
