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的時候會說明的)