Dagger2学习笔记一

什么是Dagger

Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护。

什么是依赖注入

提到依赖注入,那就会提到另外一个词控制反转
在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入,其中得分最高的一个答案是:
当你自己去冰箱里取东西,你可能会导致一些问题。你可能让冰箱门开着,你可能会取一些妈妈或爸爸不希望你拿的东西。你甚至可能会寻找一些冰箱里没有或已过期的东西。你应该要做的只是提出需求,“午餐时我需要一些喝的东西”,然后我们确保当你坐下来时有吃的东西。

这个原理简单归结如下:

  • 高层次模块不应该依赖低层次模块,他们应该依赖于一种抽象。
  • 这种抽象不应该依赖细节,细节应该依赖于抽象

依赖倒置解决了高层次模块依赖于低层次模块和其细节的问题。
Dependency injection 是一个将行为从依赖中分离的技术,简单地说,它允许开发者定义一个方法函数依赖于外部其他各种交互,而不需要编码如何获得这些外部交互的实例。 这样就在各种组件之间解耦,从而获得干净的代码,相比依赖的硬编码, 一个组件只有在运行时才调用其所需要的其他组件,因此在代码运行时,通过特定的框架或容器,将其所需要的其他依赖组件进行注入,主动推入。
  依赖注入可以看成是 反转控制 inversion of control 的一个特例。反转的是依赖,而不是其他,JNDI也是一种反转控制,它反转的JNDI名称或资源。参考: “Inversion of Control Containers and the Dependency Injection pattern”
  依赖注入是最早Spring和piconcontainer等提出,如今已经是一个缺省主流模式,并扩展到前端如Angular.js。本主题国内最早IOC和依赖注入的讨论专题。
  依赖注入与IOC模式类似工厂模式,是一种解决调用者和被调用者依赖耦合关系的模式,自2004年诞生以来,至今已经成为Java和其他领域的主流模式。它解决了对象之间的依赖关系,使得对象只依赖IOC/DI容器,不再直接相互依赖,实现松耦合,然后在对象创建时,由IOC/DI容器将其依赖的对象注入Inject其体内,故又称依赖注入依赖注射模式,最大程度实现松耦合,特别是Autowiring/Autowired自动配对引入,再结合Java的垃圾回收机制,使得在Java中,对象不再需要开发者自己创建,也需要开发者自己销毁,只需要直接使用即可,大大提升了开发效率。
  详细解释:依赖注入说白一点,就是容器将某个类依赖的其他类注入到这个类中。
  那么什么是依赖?如下代码表示A依赖B,因为Ad的方法行为mymehtod有一部分要依赖B的方法m实现,如同小孩在某些行为要依赖父母帮助完成一样,父母亲经常在小孩需要做什么事情时,主要帮助其做好,把他需要的结果直接给他,这也是一种依赖注入,(长此以往,小孩的独立性会丧失):

public class A{
  private B b;
  public A(B b){
    this.b = b;
  }  
      public void myMethod(){
    b.m();  
    }
}

在通常情况下,我们是在使用A时同时需要将B的实例赋予A。
  A a = new A(new B());
  a. mymethod();
  而通过依赖注入容器或框架,A对B的依赖无需我们编写代码时赋予,只要我们从一个工厂或容器中获取A的实例,这个工厂或容器是依赖注入框架提供的,它会在里面偷偷地将B的实例注入到A中:
  A a = factory.getA();
  a. myMethod();
这样,我们客户端调用代码就只和A耦合,这样,我们无需打开A的代码,观察其内部和哪些其他类发生依赖耦合,然后手工将这些依赖的实例注入其中。

-----待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容