我所理解的Dagger2
来源:互联网 发布:linux安装插件 编辑:程序博客网 时间:2024/05/17 02:47
在上一篇中简单的理解了一下什么是依赖注入:依赖注入的简单理解
这一片简单的记录一下自己对Dagger2的理解:(网上资料数不胜数,这里我也是在此基础上增加自己的一点理解)
Dagger2:
我们先来了解一下Inject,Component,Module,Provides之间的关系:
不知道有没有看明白:
1、Inject主要是用来标注目标类的依赖:
可以这样认为,你在Activity中要用到Person类,那么你只需在这个属性上标注@inject
@Injectpublic Person mPerson;2、Component它是一个桥梁,一端是目标类,另一端是目标类所依赖类的实例,它也是注入器(Injector)负责把目标类所依赖类的实例注入到目标类中,同时它也管理Module。那么它是怎样工作的呢:
Component会查找目标类(这里指MainActivity)中用Inject注解标注的属性(即Person类),查找到相应的属性后会接着查找该属性对应的用Inject标注的构造函数(在使用Module时,可以不用@inject对Person中的构造函数进行注释)。
@Component(modules = TestModule.class)//这里的Module(TestModule)类可以看成一个工厂,专门生产Person对象的public interface TestComponent { void inject(MainActivity activity);}
3、Module中的创建类实例方法用Provides进行标注,Component在搜索到目标类中用Inject注解标注的属性后,Component就会去Module中去查找用Provides标注的对应的创建类实例方法,这样就可以解决第三方类库用dagger2实现依赖注入了。Module和Provides是为解决第三方类库而生的,Module是一个简单工厂模式,Module可以包含创建类实例的方法,这些方法用Provides来标注。
@Modulepublic class TestModule { public Activity mActivity; @Provides public Person providesPerson() { return new Person();//这里new出一个Person对象 }}
接下来的变动操作都放在Module类中进行更改就可以了。
注意,接下来高能预警:
Dagger2的实现原理是怎样的,我们可以跟中代码过程:
通过对代码的追踪,可以看出,和上一篇中所理解依赖注入的思想是差不多一致的:通过接口的形式传递一个实例到当前的界面中,而不是从新new一个。如有错误之处还望指点.....
依赖注入的简单理解
- 我所理解的Dagger2
- 我所理解的Dagger2
- 我对Dagger2的理解
- 我所理解的PKI
- 我所理解的抽象
- 我所理解的OpenSocial
- 我所理解的IOCP
- 我所理解的Rails
- 我所理解的爱情
- 我所理解的团队精神
- 我所理解的HBase
- 我所理解的生活
- 我所理解的JSON
- 我所理解的生活
- 我所理解的syslog
- 我所理解的KMP
- 我所理解的抽象
- 我所理解的马
- 《数据结构》严蔚敏版(java解)——第四章 串01 串的模式匹配KMP算法
- maven(3) parent用dependencyManagement控制版本没有传递给module的问题,dependencies.dependency.versionknown-version
- umeditor图片上传跨域问题
- win7 32/64位 下安装 Microsoft Web Application Stress Tool 增加了64位系统方法
- 将数据从CSV文件导入PG数据库
- 我所理解的Dagger2
- 沟通技巧 自我管理
- UIDatePicker 基本设置-显示已经选择的日期 并设置最大、最小日期
- 软件测试中的存根程序
- LTE双流波束赋形技术研究
- bzoj1627
- Linux 学习第一篇
- Mybatis批量更新数据库与批量插入数据库(以oracle为例)
- Pycharm使用gitlab