dagger2 循序渐进学习(一)依赖注入基础知识(包会)

前言

dagger2 是目前由Google维护的一个依赖注入的框架。也是火的一塌糊涂。目前笔者也正着手学习和使用在实际项目中。说到依赖注入,网上很多文章都是从一个小小的案例两个类的依赖关系进行推演,说到依赖注入就是为了更好的解耦。但是,并没有具体讲为什么要这样解耦,笔者就想深究一下。其实也不是什么高深的东西,依赖注入说到底就是写代码的一种套路,那么为什么有这种套路呢,所谓套路其实就是大家常说的设计模式来或者面向对象啦此类的。不知读者读到这里有没有灵光一闪。

依赖倒置原则

面向对象的六大原则之一,英文翻译 Dependence Inversion Principle ,一种特定的解耦形式,高层模块不依赖于低层模块的实现的细节,依赖模块被颠倒了,可能有点难理解。

依赖倒置原则遵循以下几个关键点:

1 高层模块不应该依赖低层模块,两者都应该依赖其抽象;

2 抽象不应该依赖细节

3 细节应该依赖抽象;

在java中,抽象就指 抽象类和接口类,不能被实例化的,细节就是这两者的继承类和实现类,其特点就是可以被实例化,就是说可以new出来一个他的实例。高层模块是调用端,低层模块就是实现类。依赖倒置在java中就是:<b>模块之间依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。</b>其实说白了大白话,就是面向接口编程,面向抽象编程。面向接口编程是面向对象理论的精髓之一。所以依赖倒置过程中的解耦形式,就是调用代码中,都是用的接口类型的对象实例,调用端无需知道,具体谁实现的这个接口,从而实现解耦,在运行和测试环境下,当传入不同的实现类可以完成不同的工作。

依赖注入

通过上面的背景了解,我们知道:所谓 依赖注入 依赖就是调用端里面的接口对象,或者说这些对象就是高层调用端的依赖。如下:

Paste_Image.png

下面看一小段代码

public class Car{

private Engine engine;

public Car(){
    engine = new Engine();
}
}

这段Java代码中Car类持有了对Engine实例的引用,我们称之为Car类对Engine类有一个依赖。由于没有依赖注入,因此需要我们自己是在Car的构造函数中创建Engine对象。
这样明显丧失了灵活性,一切依赖都是在Car类的内部创建,Car与Engine严重耦合。一旦Engine创建方式发生了改变,我们就必须要去修改Car类的构造函数另外我们也没办法替换动态的替换依赖实例(比如我们想把Engine的品牌更换 或者更换型号)。这类问题在大型的商业项目中则更加严重,往往A依赖B、B依赖C、C依赖D、D依赖E;一旦稍有改动便牵一发而动全身,想想都可怕!而依赖注入则很好的帮我们解决了这一问题。且看下面的代码

依赖注入其实并不神奇,我们日常的代码中很多都用到了依赖注入,但很少注意到它,也很少主动使用依赖注入进行解耦。这里我们简单介绍一下赖注入实现三种的方式。

1 构造注入

    public class Car{

    private Engine engine;

    public Car(Engine engine){
        this.engine = engine;
    }
    }

2 接口注入 常见于mvp模式中

public interface Injection<T>{

    void inject(T t);
}

public class Car implements Injection<Engine>{

    private Engine engine;

    public Car(){}

    public void inject(Engine engine){
        this.engine = engine;
    }

}

3 set方法注入

public class Car {

    private Engine engine;

    public Car(){}

    public void setEngine(Engine engine){
        this.engine = engine;
    }
}

4 注解注入

public class Car{

    @Inject
    Engine engine;

    public Car(){}
}

这四段代码都达到了解耦的目的,达到高内聚低耦合的目的,保证代码的健壮性、灵活性和可维护性。(依赖的实例化不在Car类内部,就是不在这里new出来的),

至此,所有的依赖注入功能及展示形式,是不是很简单!!他是如何解耦的稍微回味一下,很好理解。今天就到这,对我自己说晚安!

文章索引
dagger2 循序渐进学习(一)依赖注入基础知识(包会)
dagger2 循序渐进学习(二)
dagger2 循序渐进学习(三) 实例1,application中的应用

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • 版本:Angular 5.0.0-alpha 依赖注入是重要的应用设计模式。它使用得非常广泛,以至于几乎每个人都称...
    soojade阅读 2,974评论 0 3
  • 文章索引dagger2 循序渐进学习(一)依赖注入基础知识(包会)dagger2 循序渐进学习(二)dagger2...
    张哲1111阅读 898评论 0 2
  • (曾在考研最艰苦的时候写下这些文字,如人饮水,冷暖自知。) 生活的终极意义是什么?似乎我之前的二十多年...
    潇湘清筠阅读 497评论 0 0
  • 虔诚佛的人死后会选择念经超度 以此超生,扔下罪过 佛曰:“来世,今生”“因果报应” 。 所以他们对离去并不惧畏 用...
    安年_阅读 252评论 0 1