Dagger 笔记 一

最近一段时间在学习dagger这个框架,把自己一些理解和笔记记录下来。
class A 中 需要class B中的事例 B是A的依赖

class A{
B b;
public A ( B b ){
this.b = b;
   }
}

上例就是所谓的依赖注入,将b对象注入到A中 dagger框架获取注入对象实例的时候会去寻找 @Inject修饰的构造函数 或者@Provides 修饰的函数
还是上例

class A{
@Inject B b; //告诉dagger这个地方需要被注入
}

在合适的位置调用ObjectGraph.inject()函数,dagger就会自动调用B的生成方法来生成依赖的实例
ObjectGraph是一个dagger自身的一个依赖管理类,create的参数是一个数组,数组里面是所有需要用到的Module

   @Module(injects = A.class)
    public class AppModule {
}

上例我们声明了一个模块,用@Module声明,Module的作用是提供信息,让ObjectGraph知道哪些对象需要被依赖注入,上例中A需要被依赖注入, inject声明了需要被依赖注入的类是A
@Inject可用于修饰属性和构造方法,可实例化的类,并且修饰的函数只能是构造函数,
@Provides 只能用于@Module修饰的类并且不能用于修饰构造函数,修饰的函数必须以provide开头
@Singleton 注解单例 依赖的对象只能被初始化一次,之后每次使用都会被注入相同的对象
注解单例有两种模式
一:注解构造函数的单例模式

@Singleton
  class B{
    @Inject
    public b(){}
}

二:注解函数的单例模式
@Provieds@Singleton [函数]
Qualifier(限定符)
有程序员这个类。类中有两类程序员人,他们的能力值 power 分别是 5 和 1000,dagger怎么对他们做出区分,这时候就可以用@Qualifier 注解
(1). 创建一个 @Qualifier 注解,用于区分两类程序员:

@Qualifier
@Documented
@Retention(RUNTIME)
public @interface Level {
String value() default "";//能力值
}

(2). 为这两类程序员分别设置 @Provides 函数,并使用 @Qualifier 注解对他们做出不同的标记:

@Provides @Level("low") Coder provideLowLevelCoder() {
Coder coder = new Coder();
coder.setName("战五渣");
coder.setPower(5);
return coder;
}
@Provides @Level("high") Coder provideHighLevelCoder() {
Coder coder = new Coder();
coder.setName("大神");
coder.setPower(1000);
return coder;
}

(3). 在声明 @Inject 对象的时候,加上对应的 @Qualifier 注解。
@Inject @Level(“low”) Coder lowLevelCoder;//注入能力5的对象实例
@Inject @Level(“high”) Coder highLevelCoder;//注入能力1000 的对象实例
注意:
(1). 所有需要依赖注入的类,需要被显式声明在相应的Module中。
(2). 一个Module中所有 @Provides 函数的参数都必须在这个 Module 中提供相应的被 @Provides 修饰的函数(这里是指@Provides修饰的函数中带有参数,参数是别的class的对象实例,生成该对象实例必须在该Module中并且被@Provides修饰),或者在 @Module 注解后添加 “complete = false” 注明这是一个不完整 Module,表示它依赖不属于这个 Module 的其他 Denpendency。
(3). 一个Module中所有的 @Provides 函数都要被它声明的注入对象所使用,或者在 @Module 注解后添加 “library = ture” 注明它含有对外的 Denpendency,可能被其他Module依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值