Dagger是一款优秀的注入框架,但是它是怎么实现依赖注入的呢,或者说,为什么通过Component,Module,以及@Inject等关键字就可以实现自动注入呢?我们将通过Dagger自动生成的注入代码观察其工作原理。
Dagger基础概念
1.1: @Component
Components从根本上来说就是一个注入器,也可以说是@Inject和@Module的桥梁,它的主要作用就是连接这两个部分。 Components可以提供所有定义了的类型的实例,比如:我们必须用@Component注解一个接口然后列出所有的@Modules组成该组件,如 果缺失了任何一块都会在编译的时候报错。所有的组件都可以通过它的modules知道依赖的范围。
1.2: @Module
Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger在构造类的实例的时候,就知道从哪里去找到需要的 依赖。modules的一个重要特征是它们设计为分区并组合在一起(比如说,在我们的app中可以有多个组成在一起的modules)。
1.3: @Provider
在modules中,我们用这个注解来修饰具体的方法,以此来告诉Dagger我们想要构造方法返回的对象并提供将此提供依赖。
1.4: @Inject
我们通常在需要依赖的地方使用这个注解。你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。
1.5: @Scope:
Dagger2可以通过自定义注解限定注解作用域。在具体的代码过程中,我们没必要让每个对象都去了解如何管理他们的实例。使用该注解,将限定其存活时间。简单来说就是我们可以定义所有范围的粒度。Dagger结构
本章将Dagger的基本概念以及结构做一个大概的介绍,让初识或者未接触Dagger的朋友一个大概的印象,下章将具体讲解Dagger的注入工作原理。