Qualifier即Named

当module的@Provides提供相同变量的不同属性时:用于区分把哪一个初始化

Module
Component
Activity
Qualifier

自定义的Qualifier与官方的Named原理一样

官方的Named

Scope即Singleton

以Component为依据,在指定范围内的单例

Module
  1. 在@Provides为外界提供Jacket时,参数中用到了Cloth,必须在Module中@Provides为Jacket提供Cloth
  2. 自定义的Qualifier和Named也可以在参数中使用
Component

在用到的Cloth和Component上同时添加@Singleton,此时Cloth为单例

Activity

此时的Cloth和JacketRed.getCloth()为同一个

Scope

自定义的Scope与官方的Singleton原理一样,替换Singleton为JacketSingleton仍返回true

自定义的JacketSingleton:在JacketSingleton作用域内单例

官方的Singleton

dependencies

实例:分别创建两个Activity,跳转后的实例为同一个(工具类多此用法在app层单例)

分别创建两个Module

JacketModule与JacketModule2

创建Component
方法一:dependencies
方法二:Subcomponent
创建BaseModule
创建BaseComponent
在app中初始化BaseComponent
在两个Activity中使用
结论

分别在两个Activity中初始化的Jacket哈希值相同,为同一个变量,app层单例。

Lazy与Provider

Lazy用于延迟加载,所谓的懒加载就是当你需要用到该依赖对象时,Dagger2才帮你去获取一个;Provide用于强制重新加载,也就是每一要用到依赖对象时,Dagger2都会帮你依赖注入一次

05-11 22:31