美文网首页
Dagger2学习笔记

Dagger2学习笔记

作者: 单程0 | 来源:发表于2018-02-12 23:07 被阅读11次

声明:第一次做笔记,仅做自己学习后总结记录,如有侵权请及时联系我删除.

笔记只作用法记录,不涉及原理,如果有人看过本文,发现错误,请留言指出.谢谢

笔记代码: https://github.com/oneway2030/Dagger2Note

参考文章:

https://www.jianshu.com/p/24af4c102f62

https://github.com/luxiaoming/dagger2Demo

https://www.jianshu.com/p/1d84ba23f4d2

文章目录

*@Inject 与 @Component

*@Module与@Provides

*@Name与@Qualifier 

* @Scope(作用域)

    -@Singleton

    -@xxxxx自定义注解

* @dependence与@SubComponent

* set与map

* Lazy(懒加载)

零.  简单使用 @Inject 与 @Component

举个栗子: 在mianactivity中使用某个对象(Test)

1.在test构造上加入@Inject 注解

2.创建注入器Component接口

3.把Test对象注入MainActivity

一. Module与Provides

举个栗子: 在OneActivity中使用使用第三方库的对象(Test2).

因为无法在第三方库上加注解所以这里要使用Module与Provides

1.第三方库Test2对象

2.构建Module

3.创建注入器Component

注:@Component(modules = OneModule.class) 指明该Component依赖OneModule

如果该Component依赖多个module则:

@Component(modules = {OneModule.class,xxxx.class,xxxx.class.....})

4.创建注入器 将Test2注入到OneActivity

* 这里要注意一下, 如果需要注入的Test2是自己写的,可以加入@Inject注解,并且这个Test2构造需要Context参数,那么module这样写

OneActivityComponent与OneActivity不变.

二.  @Name与@Qualifier

举个栗子: 假设孩子分为男孩女孩, 那么modul里提供两个

函数制造两种孩子,然后注入到TwoActivity中,如图

这种直接编译报错,dagger2无法分辨你注入的是哪一个性别的孩子.

会报错:cannot be provided without an @Provides- or @Produces-annotated method.

正确做法:

方式一:@Name

1.在module中 提供孩子的函数上加入标签@Name,那么的名字随意,但是后面使用中要与这里保持一致

2.在注入的地方也加入@Name注解, 注解里的String与Module里保持一致

方式二:@Qualifier

1.自定义Qualifier 注解

2.在module中 加上@你定义相对应的注解名字

3.在注入的时候 也加上@你定义相对应的注解名字

三 Scope(作用域)

两个要点:1.关键注解 @Singleton  2.自定义注解@XXXX

1. @Singleton 单例

先说使用:

1.步骤一 在module里Provide方法上添加@Singleton注解

2.步骤二 在Component上加@Singleton注解

那么就已经完成

打印结果:

两个个地址相同,那么完成了单例.

注:@Singleton单例并不是全局单例,可以理解为局部单例.

举个栗子:跳转到第二个界面SecondActivity,再次注入 Test3,这个时候会发现,打印出的one和two也相同, 但是与ThreeActivity的地址不相同.(这里就不贴代码了,自己有兴趣就去试试.)

为什么呢?

我的理解是:SecondActivity重新生成了注入器Component,

@Singleton只能保证同一个注入器所在的作用域是单例.

那么怎么实现全局单例呢?只要保证Component唯一,也就全局单例了.So...只要把Component写在Application里,然后全局使用同一个Component,也就实现了全局单例.

2. 自定义作用域

1.步骤一自定义注解在注解上@Scope

2.把方法一种的@Singleton 换成@ThreeActivityScppe (@你定义的注解名字)

然后使用就一模一样.

此方法适用场景:A,B界面共用数据C, AA,BB界面公用数据D,那么A,B界面使用一个自定义注解的作用域@CScope,AA,BB公用另一个自定义作用域@DScope

四. 组件依赖 dependence与SubComponent

方式一 dependence:

步骤一:有一个通用的Component 并提供两个函数

步骤二:让FourActivityComponent依赖这个CommonComponent

步骤三: 注入

打印结果

方式二 SubComponent:(此方式不是太理解)

步骤一:定义module

步骤二 定义component

步骤三:注入

五. set与map

1.map

2.set

注入:

打印结果

六. 懒加载

使用Lazy包裹被注入的对象,  在使用的时候调用get()函数

相关文章

  • Dagger2学习笔记5(关于Lazy,Provide的使用)

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)Dagger2学习...

  • Dagger2学习笔记4(@Singleton 与@ Scope

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)Dagger2学习...

  • Dagger2学习笔记3(各个注解学习)

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)上篇中学习了如何使...

  • Dagger2学习笔记(二)

    系列文章:Dagger2学习笔记(一)Dagger2学习笔记(二) 在上一篇文章我们讲了用于搜索的SearchAc...

  • Dagger2学习笔记(一)

    系列文章:Dagger2学习笔记(一)Dagger2学习笔记(二) 依赖注入是一种十分好的技巧,它能解偶高层次模块...

  • Dagger2 框架与 SystemUI

    学习笔记:Dagger源码[https://github.com/google/dagger] Dagger2 注...

  • Dagger链接

    [Dagger2学习笔记] (https://blog.csdn.net/sweet_smile5/article...

  • Dagger2学习笔记

    声明:第一次做笔记,仅做自己学习后总结记录,如有侵权请及时联系我删除. 笔记只作用法记录,不涉及原理,如果有人看过...

  • Dagger2学习笔记

    学习资料: Dagger2概念详细讲解 一共3篇文章,以形象的例子和清晰的思路,讲清楚了下面三个问题,建议看下面的...

  • Dagger2学习笔记

    前言 项目开撸阶段,准备接入Dagger2,再重新学起来!这篇文章主要是记录对dagger2的学习,从基本使用,到...

网友评论

      本文标题:Dagger2学习笔记

      本文链接:https://www.haomeiwen.com/subject/teidtftx.html