Android Dagger 2
Dagger 2 依赖注入
1. 基本概念
最重要有四个概念,也是四个注解(annotation),Provide,Inject,Module,Component。
Provide 是提供者,创建实例。
- @Provides
- static NetworkApi provideNetworkApi(){
- return new NetworkApi();
- }
Inject 就是注入,意思是去寻找这个实例。这个实例由之前的 Provide 提供。
- public class MainActivity extends AppCompatActivity {
- @Inject
- NetworkApi networkApi;
- }
Module 是用于存放所有 Provide 的容器。
- @Module
- public abstract class MyApplicationModule {
- @ContributesAndroidInjector
- abstract MainActivity contributeActivityInjector();
- @Provides
- static NetworkApi provideNetworkApi(){
- return new NetworkApi();
- }
- }
Component 是注入器,用于管理所有需要注入的实例,也是实例提供者和注入者的桥梁。它是一个 interface。
- @Component(modules = { AndroidInjectionModule.class, MyApplicationModule.class})
- public interface MyApplicationComponent extends AndroidInjector<MyApplication> {}
2. 实例的提供
实例有两种提供方式,一种就是刚刚提到的在 Module 中的 Provide 方法。另一种是直接在类的构建函数里加上 Inject 注解,这样它就变成了默认的可以直接被 Dagger 调用的构造函数。它就是实例的提供者。
3. 在 Android 项目中使用 Dagger
1. 在项目中导入 Dagger。在 app 下的 build.gradle 里 :
- dependencies {
- // Dagger2
- compile 'com.google.dagger:dagger:2.x'
- compile 'com.google.dagger:dagger-android:2.x'
- annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
- annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
- }
- android {
- configurations.all {
- resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
- }
- }
2. 创建用于被注入的类,如前面示例中的 NetworkApi。如果需要,可以在某个构造函数上加 Inject 注解作为实例提供者。
3.
参考文章:
http://www.andevcon.com/news/keddit-part-10-kotlin-dagger-2-dependency-injection
http://blog.csdn.net/soslinken/article/details/52184113
http://www.jianshu.com/p/01d3c014b0b1
Android Dagger 2的更多相关文章
- Android Dagger依赖注入框架浅析
今天接触了Dagger这套android的依赖注入框架(DI框架).感觉跟Spring 的IOC差点儿相同吧.这个框架它的优点是它没有採用反射技术(Spring是用反射的),而是用预编译技术.因为基于 ...
- Android Dagger 2 无法自动生成 Dagger Component
给项目升级 gradle(3.0)和 build(27)后发现 Dagger 2 无法自动生成 Dagger Component 类了. 原因竟是我把 : kapt 'com.google.dagge ...
- 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)
标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...
- [Android]使用Dagger 2来构建UserScope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6237731.html 使用Dagger 2来构建UserSco ...
- [Android]使用Dagger 2进行依赖注入 - Producers(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6234811.html 使用Dagger 2进行依赖注入 - P ...
- [Android]在Dagger 2中使用RxJava来进行异步注入(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客: # 在Dagger 2中使用RxJava来进行异步注入 > 原文: 几星期前我写了一篇关于在Dagger 2中使用*Producers*进行 ...
- [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...
- [Android]使用Dagger 2依赖注入 - API(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...
- [Android]使用Dagger 2依赖注入 - 自定义Scope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5095426.html 使用Dagger 2依赖注入 - 自定义 ...
随机推荐
- ListView item中有button或EditText时 点击事件失效问题的解决
加入:android:descendantFocusability="blocksDescendants" 代码如下: <LinearLayout xmlns:android ...
- centos6中搭建tomcat
一.安装jdk [root@tomcat ~]# yum -y list java* Loaded plugins: fastestmirror, security Loading mirror sp ...
- 使用Hadoop API 压缩HDFS文件
下篇解压缩:使用Hadoop API 解压缩 HDFS文件 起因: 集群磁盘剩余空间不足. 删除了存储在HDFS上的,一定时间之前的中间结果,发现并不能释放太多空间,查看计算业务,发现,每天的日志存在 ...
- QT5中无法包含Qtgui头文件的问题。
今天新学QT是,从一个ppt中边看边抄边学.前几页还能理解,但到了用纯源码写空白QT工程时,便遇到了一个问题.头文件里包含 #include <QtGui> 但是编译时总是出现下面图一中 ...
- caffe 笔记
caffe模块: blob:caffe中数据的封装,用于layer上流动 layer:输入层.输出层.神经网络层的抽象 net:神经网络结构,将layer层叠关联起来 solver:定义神经网络训练和 ...
- UVa 10294 Arif in Dhaka (First Love Part 2) (Polya定理)
题意:给定 n 和 m 表示要制作一个项链和手镯,项链和手镯的区别就是手镯旋转和翻转都是相同的,而项链旋转都是相同的,而翻转是不同的,问你使用 n 个珠子和 m 种颜色可以制作多少种项链和手镯. 析: ...
- font-style字体设置
用到一些字体找起来很麻烦,扒了一些 未测试 HTML,CSS,font-family:中文字体的英文名称 宋体 SimSun黑体 SimHei微软雅黑 Microsoft YaHei微软正黑体 Mic ...
- Arria10中的OCT功能
OCT是什么? 串行(RS)和并行(RT) OCT 提供了 I/O 阻抗匹配和匹配性能.OCT 维持信号质量,节省电路板空 间,并降低外部组件成本. Arria 10 器件支持所有 FPGA 和 HP ...
- CPU load高而使用率低的问题分析
最近服务器上出现了一个很诡异的问题,症状如下图所示: 查看进程发现: 如上图所示,非常多的df -h进程没有退出.于是手工kill掉这些 df -h进程.cpu load恢复正常. 至于为什么会有这么 ...
- Ubuntu 12.04 下安装 JDK 7
原文链接:http://hi.baidu.com/sanwer/item/370a23330a6a7b23b3c0c533 方法一1.下载 JDK 7从http://www.oracle.com/te ...