天天看點

java inject例子_Dagger基礎:Java依賴注入标準(javax.inject)介紹

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