一般在须要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段须要依赖注入。这样,Dagger就会构造一个这个类的实例并知足他们的依赖。缓存
Modules类里面的方法专门提供依赖,因此咱们定义一个类,用@Module注解,这样Dagger在构造类的实例的时候,就知道从哪里去找到须要的依赖。modules的一个重要特征是它们设计为分区并组合在一块儿(好比说,在咱们的app中能够有多个组成在一块儿的modules)。app
在modules中,咱们定义的方法是用这个注解,以此来告诉Dagger咱们想要构造对象并提供这些依赖。全部的Provides方法必须属于Module.ide
Components从根本上来讲就是一个注入器,也能够说是@Inject和@Module的桥梁,它的主要做用就是链接这两个部分。 Components能够提供全部定义了的类型的实例,好比:咱们必须用@Component注解一个接口而后列出全部的@Modules组成该组件,若是缺失了任何一块都会在编译的时候报错。全部的组件均可以经过它的modules知道依赖的范围。设计
注解做用域,经过自定义注解限定对象的做用范围,(如@PerActivity自定义注解,限定对象的存活时间和Activity一致)。对象
单例,使用@Singleton注解以后,对象只会被初始化一次,以后的每次都会被直接注入相同的对,@Singleton 就是一个内置的做用域。接口
当类的类型不足以鉴别一个依赖的时候,咱们就可使用这个注解标示。例如:在Android中,咱们会须要不一样类型的context,因此咱们就能够定义 qualifier注解“@ForApplication”和“@ForActivity”,这样当注入一个context的时候,咱们就能够告诉 Dagger咱们想要哪一种类型的context。作用域
重用,首次使用缓存起来重复使用it
@Qualifier 限定符 @Named 命名,为@Qualifier的实现注解io
@IntoSet、@ElementsIntoSet、@IntoMap编译