Dagger2新手入门与使用基础教程

 更新时间:2018年04月11日 11:15:15   作者:一只快乐的小程序猿丶  
网上随便搜索一下Dragger2,一大堆文章铺天盖地而来,但很多讲的不清楚,下面这篇文章主要给大家介绍了关于Dagger2新手入门与使用基础教程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

前言

前段时间,公司项目使用到了Dagger2,之前自己倒是听说过Dagger2,但是一直没有去使用,主要是因为入门难度相对于Rxjava,Retrofit要高不少,个人觉得这个难度并不是指的使用难度,而是一个理解难度。很多人就是代码照搬,写一个Component,一个Module就说自己会用Dagger2了,很可能你都不知道为什么你要去写这些。那么本篇文章将告诉你,Dagger2既然增加了代码量,那么,我们为什么还要去使用它。

什么是Dagger2

Dagger2是Dagger的升级版,是Android目前最好用的依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建。第一代由Square公司共享出来,第二代则是由谷歌接手后推出的。

为什么我要使用Dagger2

我们使用Dagger2的主要目的是降低类与类之间的耦合度,举个例子。

这里有一个Person类,我们在这个类里面,想使用RichPerson类中的方法,那么我们就需要在Person类中拿到RichPerson的实例,也就是说Person和RichPerson耦合到一起了,违背了单一职责。如果还有很多类都要使用RichPerson类中的方法,那么就会有很多类跟RichPerson这个类耦合起来,一旦RichPerson构造方法变了,比如需要传入一个id才能使用,那么所有使用RichPerson的类都需要改,这个工作量可不小,而且这样也违背了开闭原则。
这个时候如果我们使用Dagger2,我们就可以在Person类中通过@Inject的方式拿到RichPerson实例而不需要在Person中去new RichPerson

使用(基于Kotlin)

在项目的build.gradle中,添加

apply plugin: 'kotlin-kapt'
dependencies {
 kapt 'com.google.dagger:dagger-compiler:2.14.1' 
 implementation 'com.google.dagger:dagger:2.14.1'
}

这里我们就以MVP模式为例

1.传统MVP

在View层我们想要去获取数据,那么我们就要去通过构造拿到P层对象

这边gif我就不演示了,单纯的吐司提示而已,这种传统的MVP会在View层去实例化Persenter

2.Dagger2方式MVP

那么用Dagger2的方式,我们应该怎么在V层拿到P层的引用呢?

1.我们需要在P层的构造方法中添加一个@Inject注解,告诉Dagger2,我是可以通过注解拿到的


2.给你任何需要用@Inject注解拿对象的类创建一个Component类,这一步其实就是相当于告诉Dagger2,我这个类需要用到@Inject拿对象哦


3.Build——>Make Project,Dagger2会自动生成Dagger+***Component,比如


4.在V层中通过@Inject和Component拿到实例对象


到此,Dagger2基本使用完毕,我们可以通过@Inject拿到我们想要的任何对象(这个对象的构造方法前面需要添加@Inject),并且不需要new

V层拿P层,P层拿V层

上面的方式,我们可以在V层拿到P层的引用并且去调用P层的方法,那么如果我们需要在P层中拿到V层的对象,该怎么办呢?给P层也定义一个Component?不是的,这里,我们需要用到一个新的知识点,Module

那么,什么是Module呢,我个人的理解,就是把我本身提供出去,给其他类使用

1.在P层的构造中添加@Inject注解并添加V层的参数


2.给V层定义一个对应的Module,把自己提供出去


3.创建V层对应的Component,与上面不同的事,我们这里需要定义一个Module


4.Build——>Make Project,自动生成Dagger+***Component

5.调用


可能到这里你还是懵的,怎么调用一下这些方法,就把自己传过去了呢?莫慌,接下来带你去Dagger2生成的代码中去看看。

DaggerMainActivityComponent.builder()返回了一个Builder

builder是空构造,那么我们继续往下看

.mainActivityModule(MainActivityModule(this))把自己传进去,这里
做了一个非空判断之后给成员变量赋值,然后返回Builder本身

  .build()如果上面传入的值是null,抛异常,否则调用Comopent构造并传入builder


把Builder中的module赋值给Component中的module

 .inject(this)传入自身(这里的this就是activity本身)

调用injectMainPresenter方法,后面的getMainPresenter拿到presenter对象,然后给activity中@Inject注解的presenter赋值

new Presenter的时候传入了activity,完成赋值


至此我们的对象实例化完成。

总结

本文只是利用MVP的例子讲解一下Dagger2的使用,当然你可以在任何你想要实例化对象的地方用到Dagger2,说白了,就是用Dagger2代替了new,只需要记得,你想要什么对象,你就在那个对象的构造前面加上@Inject注解即可。如果你实例化的对象也需要用到你,那么你就给自己创建一个Module提供出去。

最后附上本文Demo的github地址,https://github.com/lxt1994/Dagger2Demo (本地下载

以上纯属于个人平时工作和学习的一些总结分享,如果有什么错误欢迎随时指出,大家可以讨论一起进步。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Android实现联动下拉框二级地市联动下拉框功能

    Android实现联动下拉框二级地市联动下拉框功能

    这篇文章主要介绍了Android实现联动下拉框二级地市联动下拉框功能,本文给大家分享思路步骤,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Android WindowManger实现桌面悬浮窗功能

    Android WindowManger实现桌面悬浮窗功能

    这篇文章主要介绍了Android WindowManger实现桌面悬浮窗功能,他们基本都是在Activity之上显示的,如果想实现在桌面显示的悬浮窗效果,需要用到WindowManager来实现了,需要的朋友可以参考下
    2023-04-04
  • Android 颜色大全color.xml文件使用方法

    Android 颜色大全color.xml文件使用方法

    这篇文章主要介绍了Android 颜色大全color.xml文件使用方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Android之事件分发机制与冲突详解

    Android之事件分发机制与冲突详解

    这篇文章主要介绍了Android之事件分发机制与冲突详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Android 中 WebView 的基本用法详解

    Android 中 WebView 的基本用法详解

    这篇文章主要介绍了Android 中 WebView 的基本用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Android Activity状态与操作探究

    Android Activity状态与操作探究

    Activity作为Android四大组件之一,他的启动绝对没有那么简单。这里涉及到了系统服务进程,启动过程细节很多,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2022-12-12
  • Android入门之使用eclipse进行源码开发的方法

    Android入门之使用eclipse进行源码开发的方法

    这篇文章主要介绍了Android入门之使用eclipse进行源码开发的方法,较为详细的分析了使用eclipse进行Android源码开发的具体步骤与相关注意事项,需要的朋友可以参考下
    2016-02-02
  • 详解App保活实现原理

    详解App保活实现原理

    一直以来,App 进程保活都是各大厂商,特别是头部应用开发商永恒的追求。毕竟App 进程死了,就什么也干不了了;一旦 App 进程死亡,那就再也无法在用户的手机上开展任何业务,所有的商业模型在用户侧都没有立足之地
    2021-06-06
  • Android自定义view实现圆环进度条效果

    Android自定义view实现圆环进度条效果

    这篇文章主要为大家详细介绍了Android自定义view实现圆环进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 21天学习android开发教程之SQLite分页读取

    21天学习android开发教程之SQLite分页读取

    21天学习android开发教程之SQLite分页读取,Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫,感兴趣的朋友可以参考一下
    2016-02-02

最新评论