专栏首页Android小知识Android集成Dagger2

Android集成Dagger2

  • Dagger2是一种依赖注入框架,用来帮我们进行类初始化的工作,通常配合MVP架构模式使用。
    • 在Project的build.gradle中添加apt命令

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt命令

    • 在Moudle的build.gradle中添加dagger2的依赖

    //dagger2 apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器 compile 'com.google.dagger:dagger:2.0.2' //dagger公用api provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax注解 如果同时依赖了butterknife那么可以采用如下的配置 apply plugin: 'com.android.application' //添加apt命令 apply plugin: 'android-apt' dependencies { //butterknife compile 'com.jakewharton:butterknife:8.4.0 apt 'com.jakewharton:butterknife-compiler:8.4.0' //dagger2 //指定注解处理器 apt 'com.google.dagger:dagger-compiler:2.0.2' //dagger公用api compile 'com.google.dagger:dagger:2.0.2' //添加android缺失的部分javax注解 provided 'org.glassfish:javax.annotation:10.0-b28' }

    • 下面我来简单讲解下我对Dagger2的理解 dagger2可以分为三部分,即Moudle、Component、Container,简单来讲我们可以把Container比作自己,把Component比作送餐员,把Moudle比作餐厅。 当我们需要吃饭店的饭的时候,就需要通知送餐员,然后餐厅做好交给送餐员,送餐员在提供给我们。 所以Moudle是帮我们进行构造实例的地方,Component则是需求方和供应方中间的桥梁。
    • 有了一个大概理解以后,接下来介绍下Dagger2主要用到的四个注解和它们的作用。
      • @Inject: 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。(主要用在Container上面)
      • @Module: Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger在构造类的实例 时候,就知道从哪里去找到需要的依赖。modules的一个重要特征是它们设计为分区并组合在一起(比如说,我们的app中可以有多个组成在一起的modules)。
      • @Provide: 在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。
      • @Component: Components从根本上来说就是一个注入器,也可以说是@Inject@Module的桥梁,它的主要作用就是连接这两个部分。 Components可以提供所有定义了的类型的实例,比如:我们必须用@Component注解一个接口然后列出所有的定义了的类型的实例,然后通过void inject方法把需要依赖的需求方填进去,它就会帮我们把他俩连接起来。

    好了,到这里Dagger2基本就讲完了,下一篇可能会写个小例子给大家看看。 毕竟我是刚刚开始用Dagger2,所以如果哪里写的有问题,欢迎大家前来批评指正,我会进行修改。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang sync.Cond 简介与用法

    Cond 实现了一个条件变量,在 Locker 的基础上增加的一个消息通知的功能,保存了一个通知列表,用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来...

    Dabelv
  • Go 语言进阶--基础概念

    本系列文章到现在已经将Go非常基础的部分介绍完成了,后面就开始设计非常具有Go特色的内容了,因为之后会出现一系列的名词和概念,为了方便本篇先把这些基础概念和我的...

    邹志全
  • 3年Java,鏖战腾讯

    经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。

    Java技术栈
  • Go 并发实战--限流算法

    高并发系统为了服务的可用性面对高流量及qps高峰时通常有三种常见的应对措施:缓存、降级和限流。这一篇我们来看一下限流及go相应的实现。 限流算法通常有这么几种...

    邹志全
  • Go 语言基础--反射 浅析

    反射是众多编程语言中的一个非常实用的功能,毫不意外go 也是对于反射提供了友好的支持,反射官方描述是一种能够自描述、自控制的应用。go 中的反射就是在运行时动态...

    邹志全
  • Go gRPC Hello World

    开始 gRPC 了,这篇文章学习使用 gRPC,输出一个 Hello World。

    新亮
  • R语言网络爬虫之Pubmed API的使用

    查询文献你懂的,我认为Pubmed首选。当oncotarget杂志不再被Pubmed检索的收获,多少博士内心发慌,多少专家内心悔恨自己掏出的稿费。当然,用好Pu...

    一粒沙
  • Golang sync.Pool 简介与用法

    Pool 是可伸缩、并发安全的临时对象池,用来存放已经分配但暂时不用的临时对象,通过对象重用机制,缓解 GC 压力,提高程序性能。

    Dabelv
  • Golang groupcache LRU 缓存简介与用法

    LRU(Least Recently Used,最近最久未使用算法)是一种常见的缓存淘汰算法,当缓存满时,淘汰最近最久未使用的元素,在很多分布式缓存系统(如Re...

    Dabelv
  • 怎么将golang部署到docker

    我们都知道go能够这么火是因为他是docker官方标准语言,当然了docker也将go的性能发挥到了极致,可谓是相辅相成,交相辉映。而最近学洗go的过程中很多项...

    大话swift

扫码关注云+社区

领取腾讯云代金券