在 Android 應用開發(fā)中旭贬,手動進行依賴項的管理瘩将,可能會出現(xiàn)很多問題吟税,尤其是多人合作的項目,這些問題會變得越來越棘手姿现,最終導致整個項目陷入泥潭肠仪。為了避免這些問題,我們推薦使用 Dagger2 框架备典,它只需要前期做一些工作量异旧,之后即使項目規(guī)模變大,項目復雜度提高提佣,也可以很靈活的管理依賴吮蛹,避免泛濫成災的壞味道代碼。
官方簡介:
A fast dependency injector for Java and Android.
Dagger is a compile-time framework for dependency injection. It uses no reflection or runtime bytecode generation, does all its analysis at compile-time, and generates plain Java source code.
Dagger is actively maintained by the same team that works on Guava. Snapshot releases are auto-deployed to Sonatype's central Maven repository on every clean build with the versionHEAD-SNAPSHOT
. The current version builds upon previous work done at Square.
簡單翻譯:
一個 Java 和 Android 上的快速依賴注入器拌屏。
Dagger2 是依賴注入的編譯時框架潮针。它不使用反射或運行時字節(jié)碼生成,而是在編譯時進行所有分析倚喂,并生成原生的 Java 源代碼每篷。
Dagger2 由 Guava 團隊積極維護。快照發(fā)布會自動部署到 Sonatype 的中央 Maven 庫中焦读,每次使用HEAD-SNAPSHOT
版本號進行干凈的構(gòu)建子库。當前版本建立在 Square 的 Dagger 之上。
概述
Java 中有很多優(yōu)秀的依賴注入框架矗晃,比如 Guice仑嗅、Spring Framework 等等,它們簡單易用喧兄、社區(qū)活躍无畔、生態(tài)豐富,有大量可供參考的開源項目吠冤,但它們都是基于反射的解決方案浑彰,對 Android 來說,有許多開發(fā)上和性能問題上的困擾拯辙。
Dagger2 的目標正是為了解決這些困擾郭变。它可以讓依賴隨 Activity 朝生暮死,也可以讓依賴與 Application 同舟共濟涯保,這在內(nèi)存資源極為珍貴的 Android 系統(tǒng)中尤其重要诉濒。同時,所有的代碼在編譯時生成夕春,可以避免反射帶來的性能損耗未荒,以及運行時才能發(fā)現(xiàn)的異常,進而提升開發(fā)體驗及志。
入門 Dagger2 只需要關(guān)注 @Inject
和 @Component
片排。前者主要注解在構(gòu)造函數(shù)和字段上,后者則注解在接口(或抽象類)上速侈。注解構(gòu)造函數(shù)可以生成實例率寡,注解字段可以注入實例,而注解接口則可以自動完成依賴注入倚搬。
當你熟悉 Dagger2 后冶共,我們推薦使用 Dagger2 for Android 擴展庫,它提供標準的 Android 組件抽象類每界,以及依賴注入的工具類捅僵,使用它們可以消除裹腳布代碼,讓開發(fā)人員專注于業(yè)務邏輯眨层。
最后命咐,當你完全熟悉 Dagger2 的細節(jié),你可以考慮使用 Hilt 框架谐岁,它是在 Dagger2 的基礎上構(gòu)建醋奠,提供一整套 Android 中依賴注入的標準解決方案榛臼。
目錄
- 一、入門 - @Inject
- 二窜司、入門 - @Component
- 三沛善、進階 - @Provides
- 四、進階 - @Singleton
- 五塞祈、擴展 - @Scope
- 六金刁、擴展 - @Named & @Qualifier
- 七、高級 - @Module
- 八议薪、未完待續(xù)
準備
討論本系列內(nèi)容尤蛮,需要準備基本的 Android 開發(fā)環(huán)境:
- JDK 1.8+
- Android Studio 4.0+
- Android SDK 19+
創(chuàng)建新的項目,打開 app 模塊中的 build.gradle
文件斯议,聲明 Dagger2 依賴:
dependencies {
// other dependencies
implementation 'com.google.dagger:dagger:2.28'
annotationProcessor 'com.google.dagger:dagger-compiler:2.28'
}
了解更多細節(jié)产捞,請參考:Dagger2 For Gradle 文檔。
點擊右上角的 Sync Now哼御,自動下載 Dagger2 框架:
Dagger2 所依賴的 JSR330 依賴注入標準框架:
說明
本系列聚焦 Dagger2 中的主要注解坯临,結(jié)合 API 描述,由淺入深恋昼,了解它們的用法和功能看靠,再通過實際的應用場景,解釋為什么要用它們液肌。同時也從開發(fā)者角度挟炬,展示解決問題的思路,希望可以幫助大家完全掌握 Dagger2 框架嗦哆。
如果你的時間緊張谤祖,想要快速入門,建議參閱以下資料: