Dagger2是Dagger的升级版,是一个依赖注入框架(依赖注入是什么,自行百度)
如何使用呢?
1.导入
//一定要添加dagger2的annotationProcessor!
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
compile 'com.google.dagger:dagger-android:2.11'
// if you use the support libraries
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
2.实现
先记住这个注解
@Module
:作为实例对象的容器。@Provides
:标注能够提供实例化对象的方法。@Component
:作为桥梁,注入对象的通道。@Inject
:需要注入的方法
不知道什么意思,没有关系,继续看。
dagger将程序分为三部分:
- 实例化部分:对象的实例化。类似于容器,将类的实例放在容器里。
- 调用者:需要实例化对象的类。
- 沟通桥梁:利用Dagger2
中的一些API 将两者联系
(1)实例化部分
@Module //提供依赖对象的实例
public class MainModule {
@Provides
// 关键字,标明该方法提供依赖对象
XX providerXX(){
//提供XX对象
return new XX();
}
}
(2) 沟通桥梁
@Component(modules = MainModule.class) // 作为桥梁,沟通调用者和依赖对象库
public interface MainComponent {
//定义注入的方法
void inject(MainActivity activity);
}
(3)调用者
public class MainActivity extends AppCompatActivity {
@Inject //标明需要注入的对象
XX xx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 构造桥梁对象
MainComponent component = DaggerMainComponent.builder().build();
//注入
component.inject(this);
}
}
XX 是创建的实体类;
DaggerMainComponent 是根据 MainComponent 自动生成的调用类;
3.调用流程
- 创建
Component
(桥梁),并调用注入方法。 - 查找当前类中带有
@Inject
的成员变量。 - 根据成员变量的类型从
Module
中查找哪个有@Provides
注解的方法返回值为当前类型。
到此结束。。在实现过程中,发现2.11以外的版本无法编译,不知道什么原因,如果有知道的大牛请@,谢谢