Android 依赖注入Dagger2 使用 之 初体验

关于dagger2的使用,很多人都介绍过了,本人也看了很多博客,感觉比较好的是大牛“牛晓伟”的如下三部曲:

Android:dagger2让你爱不释手-基础依赖注入框架篇

Android:dagger2让你爱不释手-重点概念讲解、融合篇

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

看完后让我豁然开朗,让我有如下感受:

- 了解了各个注解的含义以及在什么场景下应用

- 暂时明白了使用dagger的好处,虽然没感受到

如是我斗志昂扬雄心满满地就开始了我的第一次尝试,如下有了如下代码:

测试代码1:TestA

Android 依赖注入Dagger2 使用 之 初体验_第1张图片
TestA.java

测试代码2:TestB依赖TestA

Android 依赖注入Dagger2 使用 之 初体验_第2张图片
TestB.java

测试代码 3:MainActivity依赖TestB

Android 依赖注入Dagger2 使用 之 初体验_第3张图片
MainActivity.java

测试代码4:component链接MainActivity和TestB的桥梁

TestComponent.java

编译一次,生成DaggerTestComponent后修改MainActivity里面的代码,将MainActivity依赖的注入,如是就有了下面的代码:

Android 依赖注入Dagger2 使用 之 初体验_第4张图片
MainActivity.java添加依赖注入后

如是便开始运行,期待着TestA中的doSomething输出,但是结果却大相径庭,程序crash了,说MainActivity中testB是null,我就纳闷了,看别人不就是这么写的嘛,然后就各种网上各种搜、群里各种搜、向大牛请教等等,由于是周六,没人回复,等了很久微信群里有人回答了我,让我把TestB中依赖的TestA改成通过构造函数传入试试,当时就觉得不是TestB中carsh,而是MainActivity里面crash,说明是MainActivity里面注入没注入成功,跟这个应该没多大关系,但是心里虽是这么想,但是还是得尝试着改下,如是就将TestB改成如下的样子了:

Android 依赖注入Dagger2 使用 之 初体验_第5张图片
TestB.java改成构造方法参数传入后

再次运行,竟然成功了,好欣喜、好激动!!!但是让我很纳闷。。。为啥我那样写不行???

通过生成的DaggerTestComponent,查看生成的方法,让我明白了,每个依赖注解,得让dagger知道怎么生成该依赖,于是我再次修改:

 添加TestB的注入接口

TestComponent.java添加TestB依赖注入接口后

在TestB中添加注入方法

Android 依赖注入Dagger2 使用 之 初体验_第6张图片
TestB.java添加依赖注入后

再次运行,依然是成功的,于是简单得出如下结论:

使用@inject注解依赖的属性后,需要通过Dagger强制注入才能成功!

你可能感兴趣的:(Android 依赖注入Dagger2 使用 之 初体验)