参考文档

Dagger工作原理

dagger2的工作原理是,在你的java代码编译成字节码的过程中,dagger2会对所有的Component(就是用 @Component修饰过的interface)进行处理,自动生成一个实现了这个interface的类,生成的类名是Component的名字前面加上“Dagger”。比如我们定义的 AppComponent,对应的自动生成的类叫做DaggerAppComponent。我们知道,实现一个interface需要实现里面的所有方法,因此,DaggerAppComponent是实现了 loginPresenter();这个方法的。

实现的方式大致就是从 AppComponent管理的 AppModule里面去找LoginPresenter的Provider方法,然后调用这个方法,返回一个LoginPresenter。

Dagger2的重要角色

生产Dependency的工厂:Module

@Module:用于标注一个类,表明这是一个Module,而不是一个普通的类。Module就是生产Dependency的地方。

@Provides:用于标注 @Module标注类中 方法的,表明这个方法是用来生产Dependency的,这个方法叫做Provider方法。(因为一个Module也可以有一些正常的方法)。

Dependency工厂管理员:Component

跟Module不同的是,我们在实现Component时,不是定义一个类,而是定义一个接口(interface):

@Component(modules={AppModule.class})

@Singleton

public interface AppComponent {

void inject(LoginActivity loginActivity);

}

modules属性接收一个数组,里面是这个Component管理的所有Module。在上面的例子中,AppComponent只管理AppModule一个。

Component给Client提供Dependency的方法

前面我们讲了Module和Component的实现,接下来就是Component怎么给Client提供Dependency的问题了。一般来说,有两种,当然总共不止这两种,只不过这两种最常用,也最好理解,一般来说用这两种就够了,因此这里不赘述其他的方法。

方法一:在Component里面定义一个返回Dependency的方法

java 注解开发 解耦_Android java 解耦框架注解Dagger2相关推荐

  1. java反射和注解开发(备java基础,javaee框架原理)-任亮-专题视频课程

    java反射和注解开发(备java基础,javaee框架原理)-5358人已学习 课程介绍         Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明. ...

  2. flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)

    Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立) 2019年12月07日 阅读数:7 这篇文章主要向大家介绍Flex+JAVA+BlazeDS开发环境配置(Java工程 ...

  3. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    写在前面: 本文是转自:http://www.oschina.net/question/12_52027  的文章,如果要求删除,第一时间联系我立即删除! Web框架是开发者在使用某种语言编写Web应 ...

  4. 初学Java Web开发,请远离各种框架,从Servlet开发

    [转载自红薯,原帖地址]http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. ...

  5. Spring注解开发以及基于java的容器配置

    Spring4后的注解开发 使用bean.xml实现注解开发 需要导入aop包(如果没有导入该包,注解无效) beans.xml配置 <?xml version="1.0" ...

  6. java智能卡开发_《Java智能卡原理与应用开发》PDF 下载

    图书目录: 封面 扉页 版权页 内容简介 出版说明 前言 序 目录 第一部分 Java智能卡编程基础 第1章 绪言 1.1 智能卡简介 1.2 Java智能卡简介 1.3 发展前景 1.3.1 智能卡 ...

  7. 《Java Web开发实战》Java工程师推荐的进阶之路

    <Java Web开发实战>一书更加趋于实战性.此教材由浅入深.循序渐进,在语法阐述时尽量避免术语和公式,使初学者能够快速入门,全面掌握实战技能.它既可以作为高等院校本.专科计算机相关专业 ...

  8. 张孝祥java邮件开发_张孝祥java邮件开发详解笔记(生成文本邮件)

    package zxx.createMessage; import java.io.FileOutputStream; import java.util.Date; import java.util. ...

  9. java 托盘开发_基于java开发之系统托盘的应用

    代码如下: package com.b510.tray托盘; import java.awt.event.ActionEvent; import java.awt.event.ActionListen ...

  10. java retrofit_Android开发Retrofit2+Rxjava2+okHttp 网络框架封装

    释放双眼,带上耳机,听听看~! 说明 RxJava的概念其实很模糊,我对它的理解就是一个给你方便处理异步问题的框架,到底有多方便,体会过才知道... Retrofit就是对okhttp做了一层封装.把 ...

最新文章

  1. python2 与 python3的区别总结
  2. Linux启动网卡时出现RTNETLINK answers: File exists错误解决方法
  3. javafx 浏览器_浏览器中的JavaFX
  4. 程序员为什么要少写代码?
  5. 奖金15万!全球首届“AI球球大作战:Go-Bigger多智能体决策智能挑战赛”开启
  6. 区块链如何赋能车联网-Higgs Chain
  7. android 日历图,Android中的自定义日历视图
  8. 微信小程序云开发教程-JavaScript入门(3)-数据类型
  9. 详解什么是运营商大数据?
  10. Houdini函数表达式
  11. python 字典类型 get 参数_python如何利用urllib解析url参数成字典
  12. 万用表怎么测电池内阻_万用表怎么测量电阻
  13. 谷仓创造区块链+电商消费新模式
  14. 深度学习之鸡兔同笼问题
  15. 计算机科学论文生成器,高考满分作文生成器来了!分分钟批量完成「生活在XX上」...
  16. 有赞测试新人训之探索与实践
  17. word文件怎么另存
  18. c语言自定义创建文件,c语言自定义文件名?
  19. AcWing 285. 没有上司的舞会
  20. 常见的计算机专业的复合命题例子,第五章、复合命题.ppt

热门文章

  1. Redis安装及Java客户端的使用浅析(jedis)
  2. 1121: [POI2008]激光发射器SZK
  3. 搜集整理一些Cron表达式例子
  4. [引用]关于C#操作INI文件的总结
  5. VS2010与.NET4系列 19.ASP.NET4中新的HTML编码的%: %语法
  6. typeof和instanceof的用法
  7. iOS开发之理解iOS中的MVC设计模式
  8. 使用sshfs挂载服务器文件系统,用curlftpfs挂载FTP服务器
  9. 如何在Web App Project 或者 Web Site Project的App_Code 内使用 Profile/ProfileCommon
  10. 静态初始化--我的理解