从实例出发理解Dagger2(一)

看了很多Dagger2的文章,感觉道理好像明白了,但是真的到用的时候仍然有点萌萌的,哦,不,懵懵的。完全不知道从哪里下手,真系样银感到绝望啊。由此打算写一个从实例出发,从没有Dagger2的代码到一点一点带入Dagger2,希望这样可以帮助理解Dagger2。

在看这篇文章之前,希望大家对Dagger2有一个基本的了解。这样看起来更有助于理解记忆。

Dagger2 is really just an annotation processor,it's just a code generator.
Dagger2只是一个注解处理器,用于帮助生成代码。 所以先抛开之前看到的依赖注入的相关概念,认识Dagger2的本质。

看完了上面这句话,就让我们把例子举起来吧。

通常我们在构建App的时候会用到很多的库,包括网络(Retrofit/OKHttp)、图片请求(Picasso)、数据解析(Gson)等,通常我们会在Application中初始化这些库。而且这些库之间本身就会有相互的依赖,比如Retrofit依赖OKHttp,Picasso也可以使用OKHttp传输图片数据,OKHttp依赖HttpLoggingInterceptor拦截网络请求,日志的打印依赖Timber等。这样一路下来有不少初始化的代码要去写。如图所示:


Application初始化.png

这还只是一些基础库的初始化代码,如果项目稍微复杂点,Application里初始化代码多到让人头晕,甚至影响分析Application里的逻辑。

现在我们需要写一个展示GitHub用户Feed流信息的页面,长这样吧:


image.png

这里面需要用到ListView展示这些信息。这里面每一个Item叫RepoListItemRepoListItem中需要使用Picasso加载图片,那么可以这么写代码:

image.png

注意啦,这里就会有对Picasso的依赖了(Picasso.with(getContext()))。 这样是不利于我们后续的测试工作的,最好这个Picasso是由构造器传入的。那么就在构造这个类的时候传入一个Picasso对象。在构造这个类的时候需要一个Picasso 类,这就导致了对Picasso的依赖,而提供这种依赖的方法就是依赖注入。通过构造器传入对象也是一种注入依赖的方法,由此可见依赖注入并没有想象的那么神秘。代码如下:

image.png

那么我们在ListView的Adapter中构造这个Item 的时候就需要传入一个Picasso对象。这样不可避免的也就要在构造这个Adapter的时候传入一个Picasso对象。
image.png

这样在Activity中构造Adapter的时候就需要传入Picasso对象,由于Picasso在Application中已经创建好,所以直接从Application中获取就好。通过网络获取数据后就能在界面上展示了:


image.png

好了让我们来分析一下现在形成的依赖关系把。


image.png

这仅仅是一个简单的页面展示,就会涉及到这么多依赖的类,想想复杂得多的页面逻辑,new了50多个的对象,看着堆积成山的代码不禁有点无奈 。这时候就要用到Dagger2解决的问题,Dagger2能够把我们从枯燥的初始化类的工作中解放出来 ,专注业务逻辑,同时保持代码的整洁。 Dagger能够生成这些代码,只需要我们告诉他如何创建一个类,如何找到各个类之间的依赖关系(例如OKHttp和Retrofit之间的关系)。

其实上面的介绍就是想粗略的表述一下依赖注入的概念和使用Dagger的必要性。下一篇文章会讲解如何在Application中使用Dagger2逐个改变各个类库的初始化代码。

相关文章:
从实例出发理解Dagger2(一)
从实例出发理解Dagger2(二)
从实例出发理解Dagger2(三)
从实例出发理解Dagger2(四)
从实例出发理解Dagger2(五)
从实例出发理解Dagger2(六)
从实例出发理解Dagger2(七)

参考资料:https://www.youtube.com/watch?v=Qwk7ESmaCq0

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

推荐阅读更多精彩内容