Dagger2學習筆記

@Inject

1.注解構造器
2.注解非private的類成員變量
3.注解方法,該方法在所在類的構造方法結束后立即調(diào)用,可用于安全的注入this

@Component

提供兩種方式定義方法,編譯后生成DaggerXXXComponent這個類,在目標類中使用,就可以實現(xiàn)依賴注入了

1.void inject(目標類 obj);
Dagger2會從目標類開始查找@Inject注解,自動生成依賴注入的代碼,調(diào)用inject可完成依賴的注入。
2.Object getObj(); 如: Pot getPot();
Dagger2會到Pot類中找被@Inject注解標注的構造器,自動生成提供Pot依賴的代碼,這種方式一般為其他Component提供依賴。(一個Component可以依賴另一個Component)

另外:

1.@Component可以指定多個@Module的,如果需要提供多個依賴的話。
2.Component可以依賴于其他Component,可以使用@Component的dependence,也可以使用@SubComponent,這樣就可以獲取其他Component的依賴了(即獲取其他Component指定的Module)。我們Component不需要重復的指定Module,可以直接依賴其它Component獲得。

@Scope

1.@Scope的作用:
它的作用只是保證依賴在@Component中是唯一的,可以理解為“局部單例”。
@Scope是需要成對存在的,在Module的Provide方法中使用了@Scope,那么對應的Component中也必須使用@Scope注解,當兩邊的@Scope名字一樣時(比如同為@Singleton), 那么該Provide方法提供的依賴將會在Component中保持“局部單例”。
而在Component中標注@Scope,provide方法沒有標注,那么這個Scope就不會起作用,而Component上的Scope的作用也只是為了能順利通過編譯,就像我剛剛定義的ActivityScope一樣。

2.如何使用Dagger2實現(xiàn)單例呢?

很簡單,做到以下兩點即可。

依賴在Component中是單例的(供該依賴的provide方法和對應的Component類使用同一個Scope注解。)
對應的Component在App中只初始化一次,每次注入依賴都使用這個Component對象。(在Application中創(chuàng)建該Component)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容