不久前自己曾研究过Dagger2,但是觉得比较晦涩,再加上项目中没有运用到,就没有继续看下去。但近日发现 MVP + Retrofit + Rxjava + Dagger2 的 andoroid 项目框架如此流行,觉得应接着搞一波了。

  • 该系列博客的最终目标: 搭建 MVP + Dagger2 框架
  • 该系列博客包含以下几篇内容:
  1. Dagger 2 系列(一) -- 前奏篇:依赖注入的基本介绍
  2. Dagger 2 系列(二) -- 基础篇:@Inject、@Component
  3. Dagger 2 系列(三) -- 基础篇:@Module 和@Provides
  4. Dagger 2 系列(四) -- 基础篇:@Named 和 @Qualifier
  5. Dagger 2 系列(五) -- 进阶篇:@Scope 和 @Singleton

一、What is Dagger2 ?

Dagger2 是一个谷歌开源的依赖注入(Dependency Injection)框架,简称DI。Dagger2 是 Google 出的依赖注入框架。肯定有小伙伴疑问,为什么会有个 2 呢。该框架是基于 Square 开发的 Dagger 基础上开发的。 那么 什么是 依赖注入 呢?

1.1 何为依赖注入(控制反转 -- IOC(Inversion of Control))

我在网上搜索了相关内容,觉得以下解释相对容易理解(自定义后):

  1. 在一个类的具体业务逻辑中,需要另一个类的实例进行相应的操作时,在传统的设计中,通常由调用者来创建被调用者的实例(一般的,我们通过 new 的方式创建),然而依赖注入的方式,创建被调用者不再由调用者创建实例,创建被调用者的实例的工作由 IOC 容器 来完成,然后注入到调用者。因此也被称为 依赖注入
  2. 依赖注入 就是调用者需要的另一个对象实例不在调用者内部实现,而是通过一定的方式从外部传入实例,解决了各个类之间的耦合。那么这个外部,到底指的是哪里,如果指的是另一个类,那么,另一个类内部就耦合了,这种拆东墙补西墙的做法我们是不推荐的。能不能有一种方式,将这些构造的对象放到一个容器中,具体需要哪个实例时,就从这个容器中取就行了。那么,类的实例和使用就不在有联系了,而是通过一个容器将他们联系起来。实现了解耦。

个人理解:控制反转 -- 把自己新建实例对象的权利由交给了第三方工具或容器。 目标类将创建其他实例类的权利交给了第三方工具,也就是说,原来需要程序员把自主在目标类通过 new 的方式创建相关类的实例的权利,交给具体的业务(所谓的 IOC 容器) ,该容器在需要的时候通过它自己的方式创建该类的实例,即:创建类实例权利的移交

1.2 依赖注入的好处

依赖注入就是调用者需要的另一个对象实例不在调用者内部实现,而是通过一定的方式从外部传入实例,解决了各个类之间的耦合

通俗一点讲:将该对象的实例化交给其调用者,通过某种方式传入进来,这种模式就是依赖注入。常见的降低耦合的方式:

  • 构造方法注入。
  • Setter方式注入。
  • 接口注入。

二、Why Dagger2

Dagger2 的原理是在编译期生成相应的依赖注入代码。这也是和其他依赖注入框架不同的地方,其他框架是在运行时期反射获取注解内容,影响了运行效率。

栗子

public class MainClass {private  void main(String [] args){John john = new John("john",12);john.introduceSelf();}
}
复制代码

上面例子面临着一个问题,一旦 John 的创建方式(如构造参数)发生改变,那么你不但需要修改 MainClass 中创建John的代码,还要修改其他所有地方创建 John 的代码。如果我们使用了Dagger2 的话,就不需要管这些了,只需要在需要John的地方写下:

@Inject
John john;
复制代码

PS:以上就是 Dagger2 学习前的基本概念的介绍,欢迎参考指正。

参考文章


Dagger 详解

这就是Dagger2

Dagger2 入门实践

最简单的Dagger2入门教程

Android:dagger2让你爱不释手-终结篇

Dagger 2 系列(一) -- 前奏篇:依赖注入的基本介绍相关推荐

  1. dagger2 注入_使用Dagger 2在GWT中进行依赖注入

    dagger2 注入 依赖注入是一种软件开发概念,其中为对象提供了创建所需的所有对象或值. GWT用户已经熟悉GIN,但已经不推荐使用此工具,因此不再支持它,因此使用GIN的应用程序当前确实需要告别. ...

  2. 使用Dagger 2在GWT中进行依赖注入

    依赖注入是一种软件开发概念,其中为对象提供了创建所需的所有对象或值. GWT用户已经熟悉GIN,但已不推荐使用此工具,因此不再支持,因此使用GIN的应用程序当前确实需要告别. Dagger是GWT的新 ...

  3. ASP.NET CORE 第四篇 依赖注入IoC学习 + AOP界面编程初探

    原文作者:老张的哲学 更新 1.如果看不懂本文,或者比较困难,先别着急问问题,我单写了一个关于依赖注入的小Demo,可以下载看看,多思考思考注入的原理: https://github.com/anjo ...

  4. Dagger Hilt - Android官方推荐的依赖注入框架

    Dagger Hilt Android端有不少DI框架可供选择 – 例如用于控件注入的ButterKnife.用于Kotlin的Koin等,但唯有Dagger才称得上是谷歌官方认可的DI方案. Dag ...

  5. 学完这篇依赖注入,与面试官扯皮就没有问题了。

    IOC:  Inversion Of Control 控制反转 DI:   Dependency  Injection 依赖注入 1.控制反转 Inversion Of Control 的前世今生 1 ...

  6. SAP Spartacus 中的依赖注入 Dependency Injection 介绍

    先了解 Angular 中的依赖注入 依赖项是指某个类执行其功能所需的服务或对象.依赖项注入(DI)是一种设计模式,在这种设计模式中,类会从外部源请求依赖项而不是让类自己来创建它们. Angular ...

  7. 【Excel 教程系列第 10 篇】Excel 2016 界面介绍

    这是[Excel 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 今天看视频教学时,突然意识到老师说的选项卡,名称框我听都没听过,但听讲课老师一说,才知道原来"这"就是选 ...

  8. [Android]使用Dagger 2进行依赖注入 - Producers(翻译)

    使用Dagger 2进行依赖注入 - Producers 原文:http://frogermcs.github.io/dependency-injection-with-dagger-2-produc ...

  9. dagger2 注入_如何使用Dagger 2在您的应用程序中实现依赖注入

    dagger2 注入 Kriptofolio应用程序系列-第4部分 (Kriptofolio app series - Part 4) Dependency injection will signif ...

  10. 依赖注入神器:Dagger2详解系列

    依赖注入神器:Dagger2详解系列 序言 Dagger2是啥 Dagger2是啥,Google告诉我们: Dagger is a fully static, compile-time depende ...

最新文章

  1. LYNC2013部署系列PART10:后端高可用部署
  2. sql每个月每个人的花销占比_11月:每个认真生活的人,都值得被认真对待
  3. vim编辑器常用命令总结
  4. halcon学习(算子汇总)
  5. java按时间范围过滤_在Java中,如何仅选择或过滤在特定时间段内创建的文件
  6. 字节流抽象类 java
  7. djano 字段不重复_硬不硬你说了算!近 40 张图解被问千百遍的 TCP 3 次握手和 4 次挥手面试题...
  8. 自动驾驶攻破的难点在哪,何时能到Level 5?
  9. 解读Linux下的password命令
  10. JQuery 补充
  11. java中cbrt_JavaScript中带有示例的Math.cbrt()方法
  12. springcloud----简笔随文(2)
  13. 女双中后场常用技术及训练方法[技术解码]
  14. IDC:阿里云获2021中国数据治理平台市场份额第一
  15. 作为一名Sem优化师,平台怎么选?甲方or乙方?
  16. Java 之父求职被嫌年纪大,硅谷公司现在喜欢“小鲜肉”,不爱“老古董” 作者:程序媛Adele
  17. PHP excel 导出时变为科学计数法的问题
  18. XYOJ1259: 找零钱(除法 余数)
  19. 深入理解Jvm(一)--内存理解
  20. HDF5数据库和mysql数据库_hdf5存储数据

热门文章

  1. Atitit word ppt excel convert txt bp 等文档转换纯文本问题最佳实践.docx Atitit word ppt excel等文档转换txt问题最佳实践 目录 1.
  2. Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
  3. 知乎:招投标中评标方式有几种?
  4. 阿里架构师首次畅谈余额宝背后的故事
  5. 基于HBR的云上统一备份最佳实践
  6. SpaceX上天容易,Tesla自动驾驶难 | 凌云时刻
  7. 【气动学】基于matlab GUI改进的遗传算法和高斯烟羽模型模拟气体扩散【含Matlab源码 1060期】
  8. 【运动学】基于matlab质点运动规律【含Matlab源码 976期】
  9. 【基础教程】关于matlab GUI重命名的问题【739期】
  10. 【CPI指数预测】基于matlab BP神经网络CPI指数预测【含Matlab源码 662期】