Dagger系列:
- Dagger 2从浅到深(一)
- Dagger 2从浅到深(二)
- Dagger 2从浅到深(三)
- Dagger 2从浅到深(四)
- Dagger 2从浅到深(五)
- Dagger 2从浅到深(六)
- Dagger 2从浅到深(七)
- Dagger 2应用于Android的完美扩展库-dagger.android
Demo地址:
在 Dagger 2从浅到深(一)中,了解到Dagger依赖注入的基本用法,心里有两个盲点:
- @Provides是什么呢?
- 注解的构造函数是有参构造函数,该如何传递参数?
带着这两个疑问,开始本文章的话题。
所涉及到的注解
@Provides
@Provides可以认为是对@Inject的补充。对于@Inject不能满足的情况,可以使用@Provides注解方法来满足依赖性,该方法的定义返回类型满足了其依赖关系。不管是接口还是第三方库的类,甚至是相关的配置对象,都可以通过@Provides方法来提供了,以弥补@Inject的盲区。
例如:每当需要StudentBean实例时,都会调用provideStudent方法:
@Provides
static StudentBean provideStudent() {
return new StudentBean();
}
甚至,@Provides方法本身可能也拥有自身的依赖关系。例如,每当需要StudentBean实例时,都会需要依赖注入AreaBean实例。
@Provides
static StudentBean provideStudent(AreaBean area) {
return new StudentBean(area);
}
按照惯例,对于@Provides方法的命名以provide为前缀,例如, provideXx.
值得注意的是,@Provides方法本身是不能独立存在的,它必须依附于一个Module。所谓的Module是具有@Module注解的类。关于@Moduel是什么?后续即将讲解。
@Module
@Module源码:
public @interface Module {
/**
* 本身依赖的其他的Module
*/
Class<?>[] includes() default {};
/**
* 注入该模块的子组件
* 一个子组件中,可以注入多个Module
*/
@Beta
Class<?>[] subcomponents() default {};
}
</