Qualifier即Named
当module的@Provides提供相同变量的不同属性时:用于区分把哪一个初始化
Module
Component
Activity
Qualifier
自定义的Qualifier与官方的Named原理一样
官方的Named
Scope即Singleton
以Component为依据,在指定范围内的单例
Module
- 在@Provides为外界提供Jacket时,参数中用到了Cloth,必须在Module中@Provides为Jacket提供Cloth
- 自定义的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都会帮你依赖注入一次