美文网首页
Dagger2 中的 Qualifier

Dagger2 中的 Qualifier

作者: 曹仁不会飞 | 来源:发表于2018-11-16 15:40 被阅读0次

Dagger2 中创建实例对象有两种方式:

  • Inject 维度:通过用 Inject 注解构造函数
  • Module 维度:通过工厂模式的 Module 创建

其中,Module 的优先级比 Inject 高。基于同样维度的不同实例,比如
@Inject A(){}@Inject A(B b){},系统就会抱错,这种情况叫做依赖注入迷失

Qualifier限定符 就是解决依赖注入迷失的。

1.定义限定符注解

  • java 中的方式:
@Qualifier
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Named {
    String name() default "";
}
  • kotlin 中的方式:
@Qualifier
@Documented
@Retention(RetentionPolicy.RUNTIME)
annotation class Named(val name: String)

2.Module 中使用

@Provides
@Named("dog")
@Singleton
fun providesAnimal(): Dog {
    Log.e("abc", "----- dog -----")
    return Dog()
}
  
  
@Provides
@Named("dog2")
@Singleton
fun providesAnimal2(): Dog {
    Log.e("abc", "----- dog2 -----")
    return Dog()
}

3.实例化

@Inject
@field:Named("dog")
lateinit var dog: Dog

@Inject
@field:Named("dog2")
lateinit var dog2: Dog

根据打印的内容可以知道,创建对象 dog 和 dog2 的时候分别调用了 providesAnimal() 和 providesAnimal2()。
说明:如果用@Named("xx")代替@field:Named("xx")会报错,因为代码编译为 Java 字节码的时候会对应三个目标元素:一个是变量本身、还有 getter 和 setter,Kotlin 不知道这个变量的注解应该使用到哪个目标上。使用 field 关键字是告诉 Kotlin 所注解的目标是哪个。

(谢谢)

相关文章

  • Dagger2重点概念讲解

    前言 dagger2的整个依赖注入框架已经构建完成,所以dagger2中剩下的Qualifier(限定符)、Sin...

  • Dagger2 中的 Qualifier

    Dagger2 中创建实例对象有两种方式: Inject 维度:通过用 Inject 注解构造函数 Module ...

  • Dagger2 @Qualifier

    本文阅读需要五分钟本文阅读需要Dagger2简单使用的基础@Qualifier 英文含义限定词,它的作用和函数的重...

  • cannot be provided without an @I

    在用kotlin和dagger2的时候,用到了Dagger 2 的 @Qualifier来指定对象 结果报错了 搜...

  • Dagger2学习笔记

    Dagger2学习要点理解: Qualifier(限定符,就是解决依赖注入迷失问题的,即对获取对象的筛选或限定);...

  • @Qualifier分组

    上例中qualifierList被@Qualifier修饰,那么该list中只注入被@Qualifier修饰的Be...

  • Dagger2进阶-@Qualifier、@Lazy

    Qualifier 当同一个对象有多种注入方式,Dagger2怎么知道使用哪种方式注入呢?因此需要用到@Quali...

  • Dagger2 @Qualifier、 @Named、@Sco

    @Named 、@Qualifier 在同一个 Module 中 通过 @Provides 标记多个提供相同类的不...

  • Dagger2解析5-Qualifier

    Dagger2系列: Dagger2解析-1 Dagger2解析2-Component的依赖关系 Dagger2解...

  • Dagger2使用简析——@Scope、@Qualifier、@

    在了解了简单注入对象的使用后,我们将问题升级。我们平常开发中为了节省资源,在APP的生命周期内很多对象都是作为单例...

网友评论

      本文标题:Dagger2 中的 Qualifier

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