Dagger2学习笔记

1.Dagger在Android Studio中的环境配置:

1).在build.gradle(Project)中配置:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' //add this line

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

2).在build.gradle(Module)中配置:

apply plugin 'com.neenbedankt.android-apt'//注:必须加上,否则会报错:method apt() not found
dependencies {
    compile 'com.google.dagger:dagger:2.0.2'
    apt 'com.google.dagger:dagger-compiler:2.0.2'
    compile 'org.glassfish:javax.annotation:10.0-b28'
}

2.在dagger中一般会有module(依赖)和component(组件),module就是代表依赖的对象,而component组件(也叫injector)则是起到一个依赖与消费依赖(宿主host)之间的联接(桥梁)作用,通过在component组件中进行注入操作实现依赖(dependencies)与宿主(host)之间的解耦,如果不熟悉依赖注入的概念的话,可以看依赖注入简介这篇文章.这里暂时只是记录一下dagger的小demo,希望以后有时间能够深入探讨下dagger的相关内容.

3.demo的主要实现内容为:通过dagger在MainActivity中显示User(注:User为pojo对象,这里代码不再贴出来)的信息.(注:在上述的环境配置好之后再进行后面的操作)

module对象:

@Module
public class UserModule {
    @Provides
    User provideUser(){
        return new User();
    }
}

component对象:

@Component(modules = UserModule.class)
public interface ActivityComponent {
    void inject(MainActivity mainActivity);
}

完成对module和component的编写之后需要编译一次项目工程再继续后续的操作,这里涉及到dagger的工作原理,在这里不再详述.

MainActivity.class:

public class MainActivity extends AppCompatActivity{

    //依赖注入
    @Inject User user;

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

    public void daggerTest(){
        //DaggerActivityComponent为dagger自动生成的,不需要人为地改动它
        ActivityComponent component = DaggerActivityComponent.builder().userModule(new UserModule()).build();
        component.inject(this);

        showToast(user.getId()+"-"+user.getName()+"-"+user.getGender());
    }

    public void showToast(String msg){
        Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
    }
}

接下来运行程序就可以显示出相应的信息了.在这个demo中涉及到@Module、@Component、@Provides三个注解的使用,具体的概念和使用方式可以参考Dagger源码解析这篇文章.