看啥推荐读物
专栏名称: 龙衣袭
我就是我,做自己。 偶尔写写产品想法,和开发...
今天看啥  ›  专栏  ›  龙衣袭

Dagger2 @Module @Provide 的简单使用

龙衣袭  · 简书  ·  · 2018-12-17 22:46

Dagger2 简单入门三部曲(一)——是什么?
Dagger2 简单入门三部曲(二)——为什么使用?
Dagger2 简单入门三部曲(三)——怎么使用?

dagger2的使用在前面几篇文章已经介绍过了
这篇文章主要介绍dagger2@Module@Provides的使用。

先来回顾这两个注解的作用:@Module的出现是为了解决@Inject不是使用的场景,比如我们使用第三方库,或者是别人的SDK,在使用别人的东西我们是不太可能去修改的,所以@Inject就使用不上了,dagger为了解决这个问题推出了 @module,而@Providers是标注 Module中能够提供实例化对象的方法。

这么描述太抽象了,直接来代码演示吧。

假设我们有个第三方的类ThirdBean
伪代码如下:

public class ThirdBean {
    public ThirdBean() {}
    public void showToast(String str){
        Log.e("ThirdBean", "showToast: str==============>"+str );
    }
}

我们使用它是通过new ThirdBean()来实现,但是我们都使用了dagger了就不用再去new一个对象了 。

我们可以这样做:创建一个xxxxModule的类,然后用@Module去注解,再声明一个返回需要实例化对象的方法,用@Provides去注解,最后声明一个接口xxxComponent,用@Component去注解。

伪代码如下:

@Module
public class DaggerModule {

    @Provides
    ThridBean providerThirdBean(){
        return new ThirdBean();
    }
}

@Component(modules = {DaggerModule.class})
public interface MatchComponent {
    void mainActivityInject(MainActivity activity);
}

在完成以上步骤之后rebuild project,即可使用了。
按照惯例还是先使用@Inject来注解该对象,然后利用dagger2自动生成的代码来实例化该对象,最后就是调用该对象的方法测试能否调用成功。

伪代码如下:

@Inject
public ThridBean thridBean;

DaggerMatchComponent.create().mainActivityInject(MainActivity.this);

thridBean.showToast("你好 module ");

本文完~,欢迎你留言和我一起学习谈论。




原文地址:访问原文地址
快照地址: 访问文章快照