Dagger2初体验

Dagger2初体验_第1张图片
2720645-f38785b8a2c82ac1.png

0、配置环境
build.gradle(Module:app)

android {
      defaultConfig {
              ..........
            javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
      }
}

dependencies {
  // Annotation
    api 'com.google.dagger:dagger:2.0.2'
    api 'com.google.dagger:dagger-compiler:2.0.2'
    compileOnly 'org.glassfish:javax.annotation:10.0-b28'
}

1、创建一个对象类

public class PeopleBean {

    public PeopleBean() {

    }

    public void playGame() {
        Log.e("ATU", "玩游戏");
    }
}

2、创建一个Module

//第一步 添加@Module 注解
@Module
public class PeopleMainModule {
    //第二步 使用Provider 注解 实例化对象
    @Provides
    PeopleBean providerA() {
        return new PeopleBean();
    }
}

3、创建一个Component接口

//第一步 添加@Component
//第二步 添加module
@Component(modules = {PeopleMainModule.class})
public interface PeopleMainComponent {
    //第三步  写一个方法 绑定Activity /Fragment
    void inject(MainActivity activity);
}

注意:Rebuild后build文件夹会生成一个DaggerPeopleMainComponent类(Dagger+你的Component接口名,位置和你的Component接口在一个包目录下)

4、在MainActivity使用

// 使用Inject 注解,获取到PeopleBean 对象的实例
@Inject
PeopleBean peopleBean;


//添加依赖关系
DaggerPeopleMainComponent.builder().build().inject(this);


//调用PeopleBean对象的方法
peopleBean.playGame();

当PeopleBean多了一个构造参数

public class PeopleBean {
    private TwoBean twoBean;

    public PeopleBean(TwoBean twoBean) {
        this.twoBean = twoBean;
    }

    public void playGame() {
        Log.e("ATU", twoBean.getName()+"玩游戏");
    }
}
public class TwoBean {

    private String name;

    public TwoBean(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

只需将Moudle改为:

//第一步 添加@Module 注解
@Module
public class PeopleMainModule {
    //第二步 使用Provider 注解 实例化对象
    @Provides
    PeopleBean providerA(TwoBean twoBean) {
        return new PeopleBean(twoBean);
    }

    @Provides
    TwoBean providerB(){//提供给上面的providerA方法参数
        return new TwoBean("小陈");
    }
}

当一个有类的构造方法使用@Inject时,使用该类时,同样使用 @Inject

public class HasInjectBean {
    private PeopleBean peopleBean;

    @Inject
    public HasInjectBean(PeopleBean peopleBean) {
        this.peopleBean = peopleBean;
    }

    public void getL(){
        Log.e("ATU","我是有@Inject的bean类");
        peopleBean.playGame();
    }
}
// 使用Inject 注解,获取到HasInjectBean对象的实例
@Inject
HasInjectBean hasInjectBean;
//添加依赖关系
DaggerPeopleMainComponent.builder().build().inject(this);
//调用HasInjectBean 对象的方法
hasInjectBean.getL();

你可能感兴趣的:(Dagger2初体验)