Dagger2+mvp

     Dagger2是谷歌基于Square的Dagger基础上的二次开发,它移除了Dagger中所有反 射的使用,同时在构建对象图时使用@Component注解代替 Dagger中的ObjectGraph/Injector 的使用 ,从而让发者可以写出更简洁的代码 。Dagger2的编 译时注解使用 android-apt ,因此需要在build.gradle文件中引入依赖。 

    compile "com.google.dagger:dagger:2.8"
    annotationProcessor "com.google.dagger:dagger-compiler:2.8"

由于继承自 Dagger ,因 此 ,Dagger2 的很多用法和Dagger一模一样,例如

@Inject:用来标记需要注入的构造器和属性。

        a.用来标记构造器时,在需要创建这个累的实例时。Dagger会回去构造器所需要的参数并调用这个构造器进行实例化。

        b.用来标志属性时,如果这个类没有同时对构造器进行注入,那么Dagger默认会使用这个类的五参数构造器进行实例化。

   ps:需要注意的是,@Inject不支持对普通方法的注入,也不支持接口interface,第三方函数库中的类,在这种1情况下,我们可以使用@Provides注解,它用来标志函数,表示这个函数作为注入的提供者,同时函数名不重要,重要的是函数的返回值类型。所有被@Provides标志的函数都应该放在使用注解@Module标志的类定义中。

@singleton:在前面定义@Provides函数时,如果增加@Singleton注解,那么这个函数会一直返回相同的对象实例。

       @Module:@Module用于标注提供依赖的类。你可能会有点困惑,上面不是提到用@Inject标记构造函数就        可以提供依赖了么,为什么还需要@Module?很多时候我们需要提供依赖的构造函数是第三方库的,我们没          法给它加上@Inject注解,又比如说提供以来的构造函数是带参数的,如果我们之所简单的使用@Inject标记            它,那 么他的参数又怎么来呢?@Module正是帮我们解决这些问题的。

       @Provides:@Provides用于标注Module所标注的类中的方法,该方法在需要提供依赖时被调用,从而把预        先提供好的对象当做依赖给标注了@Inject的变量赋值;

       @Component:@Component用于标注接口,是依赖需求方和依赖提供方之间的桥梁。被Component标注的接口在编译时会生成该接口的实现类(如果@Component标注的接口为CarComponent,则编译期生成的实现类为DaggerCarComponent),我们通过调用这个实现类的方法完成注入;

      @Qulifier:作用和函数的重载很像。告诉Dagger依赖需求方 创建数据的时候使用哪个依赖提供方。Dagger2中,如果Module类中有多个@Provides标注的方法同时提供同一类型的依赖,IDE编译时在会报错,也就是说,Dagger2不知道该用哪个方法提供的依赖。可以通过@Qualifier来解决。

       @Scope:@Scope同样用于自定义注解,我能可以通过@Scope自定义的注解来限定注解作用域,实现局部的单例;

 默认的命名规范是:@Provides注解的函数名以provide作为前缀,@Module注解的类名以Module作为后缀。

项目地址: https://github.com/604982372/dagger2_mvp


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值