小白学习Dagger2,带你玩转Dagger2

前言

Dagger2官方定义是这样的:

A fast dependency injector for Android and Java.

一个Android和Java的快速依赖注解器。为什么说是快速呢?举个例子,另一个著名的注解框架——ButterKnife是通过Java Annotation Processing技术,就是在Java代码编译成Java字节码的时候就已经处理了 ;Dagger2也是一样,通过apt插件在编译阶段生成注入代码的,也就是说反射只是在编译阶段使用了,而在应用运行的时候其实运行的是真正的Java代码并没有涉及到注解反射。因此是快速注解。

另外,Dagger2通过apt生成的文件在build/generated/source/apt/debug/工程路径 下,后面将会结合这些文件了解Dagger2的流程。

Dagger2的使用场景:现在大多应用于MVP架构中,作用就是解耦;其次就是基本的依赖注入的功能。

小白学习之我见

个人评价:不是那么好上手……感觉看一遍源码了解了这些步骤才能很好的使用,总之,看一遍源码了解下流程对使用Dagger2有很大帮助。(对我这种没有用dagger,而直接学dagger2的人来说),另外,貌似很多人还将其跟ButterKnife一起用。ButterKnife用于注解View、其他部分用dagger2。有兴趣的可以试下。

顺便提一篇博客,写的非常不错,感觉讲的蛮清晰的:Android单排上王者系列之Dagger2使用解析

还有一点:注解加上去之后要编译一遍,这样才能生成一Dagger开头的文件,否则你再Activity中使用DaggerXXXComponent.builder().xxxModule(new XxxModule(this)).build().inject(this)是会找不到DaggerXXXComponent的,DaggerXXXComponent这些都是自动生成的(AS编译快捷键ctrl+f9)

Dagger2的使用

Dagger2的导入

1. 添加apt
首先在工程根目录下的build.gradle中修改dependencies,加入

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'//当前最新版本是1.8,可以按需求改

完整代码

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

    }

2.添加依赖
在build.gradle中加入

apply plugin: 'com.neenbedankt.android-apt'
compile 'com.google.dagger:dagger:2.8'
apt 'com.google.dagger:dagger-compiler:2.8'

完整代码:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'//将apt启动


android {
    ……………………
}

dependencies {
    ……

    compile 'com.google.dagger:dagger:2.8'
    apt 'com.google.dagger:dagger-compiler:2.8'

    ……
}

Dagger2的使用流程

以MVP为例,简单来说,就是:

  1. presenter中使用@Inject注解其构造器
  2. 在View层使用@Inject注解presenter
  3. 新建一个Module,一个Component
  4. 然后在view层中加入DaggerXXXComponent.builder().xxxModule(new XxxModule(this)).build().inject(this);

简单来说就是这样,下面就以代码为例,介绍下dagger2的详细用法

结合源码,详解Dagger的使用

恩,这部分结构有点乱,不过完全按照我学习过程中是怎么考虑的来的,如果想直接看归纳整理,可以跳转到总结部分

presenter
在presenter构造器处使用@Inject。

public class LoginPresenterCompl implements ILoginPresenter {
   
        private ILoginView loginView ;
        private User user ; 
        //注意此处使用了注解
        @Inject
        public LoginPresenterCompl(ILoginView view){
            loginView = view ;
            user = new User("张三","123456") ;
        }
        ......
    }

使用@Inject注解之后,编译生成一个LoginPresenterCompl_Factory文件,代码如下:

@Generated(
  value = "dagger.internal.codegen.ComponentProcessor",
  comments = "https://google.github.io/dagger"
)
public final 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值