dagger2 让你爱不释手:终结篇

2024-02-02 00:18
文章标签 终结 dagger2 爱不释手

本文主要是介绍dagger2 让你爱不释手:终结篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

如果您对dagger2的概念,整个依赖注入框架还不清楚,可以先了解下我的前2篇文章:

《dagger2让你爱不释手:基础依赖注入框架篇》
《dagger2让你爱不释手:重点概念讲解、融合篇》

这2篇文章也收到好多网友的好评和提问,谢谢大家的支持。我大概总结了下提的问题:

  • dagger2到底能带来哪些好处?
  • dagger2怎么使用?

因此我将结合这2点来进行本文的讲解。并且会有具体的sample。

dagger2到底有哪些好处?

咱们直奔主题:

增加开发效率、省去重复的简单体力劳动

首先new一个实例的过程是一个重复的简单体力劳动,dagger2完全可以把new一个实例的工作做了,因此我们把主要精力集中在关键业务上、同时也能增加开发效率上。

省去写单例的方法,并且也不需要担心自己写的单例方法是否线程安全,自己写的单例是懒汉模式还是饿汉模式。因为dagger2都可以把这些工作做了。

更好的管理类实例

每个app中的ApplicationComponent管理整个app的全局类实例,所有的全局类实例都统一交给ApplicationComponent管理,并且它们的生命周期与app的生命周期一样。

每个页面对应自己的Component,页面Component管理着自己页面所依赖的所有类实例。

因为Component,Module,整个app的类实例结构变的很清晰。

解耦

假如不用dagger2的话,一个类的new代码是非常可能充斥在app的多个类中的,假如该类的构造函数发生变化,那这些涉及到的类都得进行修改。设计模式中提倡把容易变化的部分封装起来

我们用了dagger2后。

假如是通过用Inject注解标注的构造函数创建类实例,则即使构造函数变的天花乱坠,我们基本上都不需要修改任何代码。

假如是通过工厂模式Module创建类实例,Module其实就是把new类实例的代码封装起来,这样即使类的构造函数发生变化,只需要修改Module即可。

有个网友问过一个这样的问题,Module的构造函数也会发生变化,发生变化后,相应的new Module的类也发生变化,这就没有达到解耦的效果。首先解耦不是说让类之间或模块之间真的一点关系都没有了,解耦达到的目的是让一个类或一个模块对与自己有关联的类或模块的影响降到最低,不是说这种影响就完全没有了,这是不可能的。

解耦还有个好处,就是方便测试,若需要替换为网络测试类,只需要修改相应的Module即可。

项目中使用dagger2注意点

具体的代码就不讲了,dagger2 sample地址,大家自行下载。这里重点说下dagger2对目标类进行依赖注入的过程,现在假设要初始化目标类中的其中一个依赖类的实例,那具体步骤就在下面:

以上是dagger2进行的一次依赖注入的步骤,其实这个步骤是一个递归的过程,并且在查找类的实例的过程中Module的级别要高于Inject,这概念在上一篇讲过。

下面在说下注意的几点

  • 一个app必须要有一个Component(名字可以是ApplicationComponent)用来管理app的整个全局类实例
  • 多个页面可以共享一个Component
  • 不是说Component就一定要对应一个或多个Module,Component也可以不包含Module
  • 自定义Scope注解最好使用上,虽然不使用也是可以让项目运行起来的,但是加上好处多多。

总结

好了关于dagger2的所有的概念知识点到此终于结束了,希望能帮助大家,与大家共勉,有问题可以随时与我沟通。

dagger2 sample地址

问啊-定制化IT教育平台,牛人一对一服务,有问必答,开发编程社交头条 官方网站:www.wenaaa.com 下载问啊APP,参与官方悬赏,赚百元现金。
QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!

http://cxy.liuzhihengseo.com/511.html

这篇关于dagger2 让你爱不释手:终结篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668916

相关文章

通过Dot1q终结子接口实现VPN接入

通过Dot1q终结子接口实现VPN接入 通过Dot1q终结子接口接入PWE3/VLL/VPLS 如图1所示,某企业不同分支跨运营商的PWE3/VLL/VPLS网络互联,PE作为运营商的边缘设备,通过子接口接入各分支网络,CE发往PE的业务数据报文携带一层或两层VLAN Tag。不同分支用户要求互通。 图1 Dot1q终结子接口接入PWE3/VLL/VPLS示意图 在PE1和PE2的

文献翻译用什么软件?这5个工具让你爱不释手

面对堆成小山的外文资料,我常常头疼不已。但自从我发现了这些神奇的工具,它们不仅帮我节约了大量时间,还提高了工作效率。 我将分享一些个人经历,希望能帮助到像我一样,经常需要快速翻译整篇文档的朋友们。这些文献翻译软件电脑工具各有千秋,从快速翻译到专业校对,总有一款能够满足你的需求。让我们一起来看看这些让我事半功倍的翻译神器吧! a.同声传译王 翻译速度:★★★★☆ 翻译准确度:★★★★

Dagger2 这次入门就不用放弃了

Dagger2 这次入门就不用放弃了 前言 之前也研究过很多次Dagger2这东西了,可能以后RxJava+Retrofit+MVP+Dagger2是Android发展的主流框架,看了Dagger2的实现代码,有点不明所以。上网也有很多文章介绍依赖注入、Dagger2的组件等等那些,这样这样这样什么组件呀、模块呀、注入呀。但是感觉对于入门来说那些文章都没有说到点子上,具体怎么用这个核心点而且应

GC终结标记 SuspendEE 是怎么回事

一:背景 1. 讲故事 写这篇是起源于训练营里有位朋友提到了一个问题,在 !t -special 输出中有一个 SuspendEE 字样,这个字样在 coreclr 中怎么弄的?输出如下: 0:000> !t -specialThreadCount: 3UnstartedThread: 0BackgroundThread: 2PendingThread: 0De

AI与音乐:共创未来还是艺术终结?

随着人工智能技术的不断进步,AI在音乐创作领域的应用已经成为了一个不可忽视的现象。最近一个月,一系列音乐大模型的推出,不仅极大地降低了普通人创作音乐的门槛,也引发了关于音乐产业未来的广泛讨论。AI是否正在创造音乐的新纪元,还是正在逐渐毁掉这一艺术形式?本文将深入探讨人工智能和音乐人的合作模式,讨论AI在音乐创作中的辅助作用,以及如何实现人机共同创作的可能性。 AI与音乐人的合作模式 在探讨

带你解析Dagger2

1. Dagger2简介: Dagger2是Dagger1的分支,由谷歌公司接手开发,目前的版本是2.0。Dagger2是受到AutoValue项目的启发。 刚开始,Dagger2解决问题的基本思想是:利用生成和写的代码混合达到看似所有的产生和提供依赖的代码都是手写的样子。 Dagger2具有以下好处: 1) 依赖的注入和配置独立于组件之外,注入的对象在一个独立、不耦合的地方初始化,这样在改

AI与音乐:创造的新纪元还是艺术的终结?

随着人工智能技术的飞速发展,AI在音乐创作领域的应用已经成为了一个热门话题。最近一个月,一系列音乐大模型的推出,不仅极大地降低了普通人创作音乐的门槛,也引发了关于音乐产业未来的广泛讨论。AI是否正在创造音乐的新纪元,还是正在逐渐毁掉这一艺术形式? AI音乐的崛起 AI在音乐创作中的应用,首先由一些精英创业公司引领,随后大型科技企业也纷纷加入这一领域。这些公司开发的音乐大模型,能够通过学习大量的

AI与音乐:共创未来乐章还是终结艺术的颂歌?

目录 引言 AI在音乐创作中的创新应用 1. 数据分析与智能作曲 示例代码:使用Magenta库生成音乐 2. 实时创作与交互 3. 辅助创作与灵感激发 AI对音乐艺术的潜在威胁 1. 标准化与同质化 2. 版权与伦理问题 3. 替代人类音乐家 平衡与共存 1. 个性化与定制化的音乐体验 2. 跨领域融合与创新 3. 教育与普及的推进 4. 社会与文化的反思 5

Python学习笔记11:入门终结篇

前言 入门知识到这里基本结束了,这里主要讲一下input和range。这两个讲完,讲讲后面进阶学些啥。 range函数 之前将循环的时候讲过一点,这个函数是Python内置的函数,主要用来生成一系列数字,简单方便。 这里重新,正式一点的讲一下。 概念 range是一个内置函数,用于生成一个整数序列,它提供了一种高效的方式来创建循环计数器。 基本用法 range(stop):生成从0开

英伟达与斯坦福携手,打造未来全息XR眼镜:头带时代的终结

在XR(扩展现实)技术的演进过程中,一个显著的挑战在于如何平衡设备的便携性与视觉体验。传统的XR设备由于需要厚重的头带固定光学器件和显示器,不仅增加了体积,还为用户带来了社交上的不便。然而,随着英伟达与斯坦福大学戈登·韦茨斯坦教授领导的研究团队的合作,这一难题似乎找到了解决之道——全息XR眼镜的诞生预示着头带时代的终结。 全息XR眼镜的核心在于其独特的光学设计,它遵循一条重要规则:显示器应尽可能