Scope
有这个注解的类包含了一个可注入的构造函数和管理injector如何重新使用这个实例
如果没有这个注解,injector生成并使用一次,然后就丢弃
有了这个注解,那就会保留以便以后的注入
如果是多线程,那就是线程安全的
@Target(ANNOTATION_TYPE)//注意看这里,这是一个加在注解上的注解
@Retention(RUNTIME)
@Documented
public @interface Scope {}
有Scope注解的注解,举一例Singleton(单例),第二次用之前就不用再次注入了
@Scope
@Documented
@Retention(RUNTIME)
public @interface Singleton {}
Singleton
Singleton的注释只有一句
Identifies a type that the injector only instantiates once. Not inherited.
仅仅只是初始化一次
Qualifier
@Target(ANNOTATION_TYPE)//注意看这里,这又是一个加在注解上的注解
@Retention(RUNTIME)
@Documented
public @interface Qualifier {}
这个注解需要注意,通常和@Retention(RUNTIME)一起使用,可以加上@Documented.同时,标注了这个注解的注解可以有属性
Named
基于string的Qualifier
@Qualifier
@Documented
@Retention(RUNTIME)//一起使用
public @interface Named {
//可以有属性
String value() default "";
}
Inject(很重要的一个注解)
Inject支持构造函数、方法和字段注解,也可能使用于静态实例成员。可注解成员可以是任意修饰符(private,protected,public)。
注入顺序:构造函数、字段,然后是方法
Inject注解的构造函数可以是无参或多个参数的构造函数。
Inject每个类中最多注解一个构造函数。
在字段注解字段不能是final的
在方法上注解不能是抽象方法,同时不能声明自身参数类型
Provider(这是个interface)
同在一个包下的还有Provider
注释很好理解
Provides instances of T. Typically implemented by an injector. ......
提供T的实例,通常implement一个injector(暂时没有实例来展示怎么用,讲dagger的时候会说明的)