前言:
我们不讨论Dagger2,这篇文章旨在教你如何快速的学会使用Dagger2。
Dagger2配置
//project的build.gradle
dependencies {
classpath'com.android.tools.build:gradle:3.0.1'
classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'//添加apt插件
}
//module的build.gradle
dependencies {
compile'com.google.dagger:dagger-android:2.13'
compile'com.google.dagger:dagger-android-support:2.13'
annotationProcessor'com.google.dagger:dagger-android-processor:2.13'
annotationProcessor'com.google.dagger:dagger-compiler:2.13'
}
接下来我们写一个极为简单的Dagger2例子,新建一个工程,把一个对象注入到MainActivity中
一、写一个测试类,此类是需要被注入的对象
public class Test{
public void method(){
Log.e("test","success");
}
}
二、编写一个Module
@Module
public class MainActivityModule{
@Provides
public Test provideTest(){
return new Test();
}
}
简单的讲下Module的作用:
生成我们所需要的注入对象,上面的provideTest()方法就会生成Test对象,然后注入到目标位置
注意:
1.类必须要用@Module来标明注解
2.用@Provides注解的函数需要以provide开头,后面接什么内容都可以
三、编写Component
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
void inject(MainActivity activity);
}
编写的这个Component需要用@Component注解来标识,同时声明了modules
inject里面参数是申明你注解到的目标对象
四、Build-->Make Project 编译
apt会自动生成一个以Dagger开头的Component,我们上面写的是MainActivityComponent,生成了类名就为DaggerMainActivityComponent。这个类我们可直接调用
五、注入到目标对象中(MainActivity)
public class MainActivity extends AppCompatActivity {
//注入
@Inject
Test test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使用Dagger2形成关联
DaggerMainActivityComponent.builder().mainActivityModule(new MainActivityModule()).build().inject(this);
test.method(); //测试
}
}
网友评论