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

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

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

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

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

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

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

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

测试代码1:TestA

TestA.java

测试代码2:TestB依赖TestA

TestB.java

测试代码 3:MainActivity依赖TestB

MainActivity.java

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

TestComponent.java

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

MainActivity.java添加依赖注入后

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

TestB.java改成构造方法参数传入后

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

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

 添加TestB的注入接口

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

在TestB中添加注入方法

TestB.java添加依赖注入后

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

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

更多相关文章

  1. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  2. Android(安卓)init源代码分析(1)概要分析
  3. Android自定义字体样式Typeface的三种技术方案:Java代码的setType
  4. Android(安卓)网络访问框架 NiceDay 发布
  5. android中的binder通信机制
  6. Android(安卓)JNI 使用的数据结构JNINativeMethod详解 ||建立And
  7. Windows 下的Android(安卓)NDK开发
  8. Android中的OpenSL ES是如何实现的?
  9. Android下引用系统库的方法及问题

随机推荐

  1. 仿微信朋友圈实现共享视图元素的切换动画
  2. Android使用BitmapRegionDecoder获取指定
  3. android滑动菜单demo
  4. [原]如何在Android用FFmpeg解码图像
  5. android中全局变量的运用
  6. No 90 · android如何调用dotnet编写的we
  7. AndroidHttpClient使用Cookie应用分析
  8. EditText的inputType属性详解,让指定的Edi
  9. Android中的Intent和Intent-Filter详解(一
  10. android 加载布局xml文件时报空指针