在项目中导入Dagger2

点击图上按钮
Dagger2的使用
打开下面的对画框点击all dependencies
Dagger2的使用
搜索dagger选择版本,按ok导入
Dagger2的使用

@Inject

@Inject用于注解构造函数或成员变量
作用于成员变量时
Dagger2根据该注解及成员变量的类型,从moudle中得到相应实例。
注意:成员变量的访问修饰符不能是private

作用于构造函数时
就是Dagger2对于获取对象实例的方式2,比如上面的例子其实可以直接在Presenter的构造函数上注解@Inject,并移除@Provides注解的方法

@Inject 不适用的情况
不具有构造函数的接口
远程引入的三方库中的类无法被添加注解
通过建造者模式等方式可配置化的进行构造的对象
(使用@Provides可以处理这些问题)

@Module

@Module注解用于获取对象实例的类,Dagger2根据该注解知道应该去哪个类里获取对象实例

@Provides

@Provides注解用于module类中获取对象实例的方法,Dagger2根据该注解及方法的返回值类型将对象实例注入到对应的引用中

@Component

@Component注解用于担任连接桥梁的接口,其两端分别是在@Component的参数中指定的modules数组和在方法参数中指定的具体类
注意:方法参数必须是要注入的具体类,而非其父类或接口

@Singleton

使得对象成为单例只需要同时在@Provides注解的方法和component接口上添加@Singleton这个注解即可。

@Binds

当注入抽象类时使用 @Binds
1、@Binds注解用于module中的抽象方法,这个方法的参数应该是具体实现类,返回值应该是抽象类,它高速Dagger2在自动生成的代码中注入抽象类引用对象时,应该使用哪一个具体实现类作为实例被获取
2、在使用抽象类作为module时,获取实例对象的方法只能使用static静态方法

@Named

区分返回同一类示例时使用

Lazy

懒加载机制,需要使用的地方只需把类名放入Lazy<>的尖括号中即可。

相关文章: