Android开发Dagger2入门

本文介绍了如何在Android Studio项目中引入Dagger2,包括配置步骤、主要注解的解释以及一个简单的应用示例,展示了Dagger2如何为MainActivity的变量提供依赖注入。

前言

本文章尝试从零开始导入Dagger2的角度讲述使用Dagger2的导入和使用。将使用AndroidStudio新建Android项目导入Dagger2并运行起来。

配置

首先新建AndroidStudio项目,并在项目app模块下的build.gradle文件的dependencies项内添加以下代码:

compile "javax.annotation:jsr250-api:1.0"
compile 'com.google.dagger:dagger:2.0'
annotationProcessor 'com.google.dagger:dagger-compiler:2.0'

分别是导入javax注解和Dagger2的相关库。

说明

Dagger2的最基本的注解是@Inject@Provides@Module@Component,后面我们会用上这4个注解,我们先看一下这几个注解分别代表的意思。以下内容为个人理解。大家可以看看官方网站的解释https://google.github.io/dagger/users-guide。本人英文水平不足,可能理解有错,望大家指正包涵。

  • @Inject一般用于注解构造方法或者变量。当其用于注解某个构造方法,而Dagger需要创建该类的实例的时候,Dagger就会调用使用这个注解的构造方法来创建实例。当其用于注解变量的时候,表示该变量将会获得Dagger的注入。

  • @Module用于注解类。当我们在某个类上添加此注解的时候,表示此类将会为注解了@Inject的变量提供内容。

  • @Provides用于注解方法,这些方法会存在于@Module注解类中为注解了@Inject的变量提供内容。被注解的方法的方法名一般以provide为前缀,以要为其提供内容的变量的变量名为后缀。但是匹配依赖并不是通过方法名或者变量名,而是通过返回值类型来匹配的。所以同一个@Module注解类中的@Provides注解的不同方法不能返回相同的类型。

  • @Component用于注解接口。Dagger会为有此注解的接口生成一个实现类,此实现类已Dagger为类名前缀,后面跟着接口名。实现类会充当工厂类,传递内容。

应用

假设我们要使用Dagger2为MainActivity的变量提供注入,那么我们将先创建几个类及接口如下:

MainActivityModule类:

import dagger.Module;
import dagger.Provides;

@Module
public class MainActivityModule {
    @Provides
    String provideTitle() {
        return "Hello Dagger2";
    }
}

MainActivityComponent接口:

import dagger.Component;

@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
    void inject(MainActivity act);
}

MainActivity:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import javax.inject.Inject;

public class MainActivity extends Activity {
    public TextView tv;

    @Inject
    public String title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DaggerMainActivityComponent.create().inject(this);

        tv = (TextView) findViewById(R.id.tv);
        tv.setText(title);
    }
}

当我们为接口MainActivityComponent添加@Component注释并在其参数中设置modules之后,再Rebuild一下工程,Dagger会为我们生成DaggerMainActivityComponent实现类。我们就可以在MainActivity中调用DaggerMainActivityComponent的create()方法或builder().build()方法创建实例并调用inject方法为MainActivity类的变量注入内容。
以上就是Dagger2的一个简单用例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄大圣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值