Dagger2學習之路(Part 1)
本文就記錄本人學習Dagger2時的一些問題或者理解。
至於關於Dagger2是什麼啊,做什麼用的啊,巴拉巴拉。我就不在此贅述了。
不過得吐槽一句,由於本人英文不是很好,在沒有任何該知識基礎的情況看英文文件很吃力,所以不得不看國內的相關部落格,不過最開始找了好久,很多看起來都沒有感覺,其內容泛泛而談,缺少原始碼例項。(當然了,這純屬吐槽,畢竟有些部落格也是別人自己一字一字碼出來的)。
最開始入門時,有幸發現了一篇很讚的文章,學習完之後也算是入門了。(學習自:使用Dagger 2進行依賴注入)
這篇文章裡面就Dagger2中的@Module
、@Provides
、@Component
三個註釋的使用舉出了通俗易懂的原始碼例項,讓人一看就能對此有了直觀的瞭解。
好了,在開始使用dagger2之前呢,需要先配置好Gradle,這裡可以參觀官方的,是最準確的。
另外,可能還需要在module的build.gradle下新增如下依賴,否則會在編譯報錯,如下圖:
compile 'javax.annotation:javax.annotation-api:1.2'
(也許是跟下圖中配置的版本有關,這點我沒有深究了)
接著,就可以跟著文章擼程式碼了。(可以在這裡直接clone我的,為了直觀的瞭解,我將自己擼的示例分成了test1、test2兩部分,即分別對應文中的簡單的依賴注入
與多層依賴
)
準備好之後,我就得注入一點自己的觀點或者理解了。
1、在簡單的依賴注入中,需要在MainActivity
中注入一個UserModel
的例項,首先就需要一個依賴模組,為了直觀,我命名成了MainActivityMoudle
(被@Module
標識了),裡面就有一個被@Provides
標識的方法provideUserModel()
,該方法返回一個目標例項,當然了,這個方法名是可以隨便命名的,只要符合Java的命名規則即可,但是一定得有@Provides
標識。
2、接著就需要一個“注入器”(即Injector,但是在Dagger2中,將其稱為Component。)將例項注入到指定的依賴中(在本例中即MainActivity)。在構建Injecyor時的注意事項在文中已經說得很清楚了,我就不再複述,只是提醒大家一定得注意了。 我在這裡要說的是,注入方法inject()
的方法名也是可以自定義的,只需要在呼叫的時候呼叫正確的方法名即可。
3、在注入時,會用到Dagger自動生成的相應的Component類(在使用前一定要將專案ReBuild一遍,才會生成該類),在我的Demo中為DaggerMainActivityComponent
(因為我在構建Injector為MainActivityComponent
)。在這裡,就可以很直觀的看到命名規律:Dagger+定義的Component名
。還有在builder()
方法後鏈式引用了mainActivityModule()
方法,其引數就是相應的Module
,這裡的mainActivityModule()
方法的命名也是有規律的,即對應的Module
名,首字母小寫即可。
4、被注入的例項的引用需要用@Inject
標識,且不能為private,並@Inject
不能標識局域變數。需要多少個例項,就用@Inject
表示相應數量的引用變數即可。
5、至於多層依賴,也比較容易理解,只要解讀一下文章與例項程式碼即可。
但是要注意,在多層依賴時,因為使用了MainActivityComponent
作為低階Component來提供依賴,原本MainActivityComponent
中的inject()
方法需要去掉,注意,是去掉,而不是與UserModel userModel()
共存,否則是無法ReBuild的。
相關文章
- postgresql學習-Part 1SQL
- Elixir學習之路1
- javaweb學習之路(1)requestJavaWeb
- linux學習之路(1)Linux
- 編譯實踐學習 Part1編譯
- python學習之路—day1Python
- RxJS學習之路四(Operators(1))JS
- Dagger2 生成程式碼學習
- 我的彙編學習之路(1):指令
- Python 學習之路 1——認識 PythonPython
- centOS學習part1:作業系統安裝CentOS作業系統
- DvaJS的學習之路1 - dva+umi官網例子學習JS
- java學習之路Java
- 學習java之路Java
- php學習之路PHP
- EBS學習之路
- web前端學習之路Web前端
- go學習之路 --- 起步Go
- 付費學習之路
- 信安學習之路
- vue-學習之路Vue
- zookeeper學習之路一
- 學習 python 之路Python
- 機器學習&深度學習之路機器學習深度學習
- 產品學習之路
- Swift學習之路-ExtensionSwift
- Qt學習之路2QT
- Android學習之路Android
- |轉| java學習之路Java
- linux 學習之路Linux
- Pytest學習之路
- Spring框架學習筆記(二):官方文件Core Technologies – Part 1Spring框架筆記
- .Net程式設計師安卓學習之路1:登陸介面程式設計師安卓
- SQL 資料庫學習 Part 2SQL資料庫
- 8086 彙編學習 Part 6
- 8086 彙編學習 Part 7
- 8086 彙編學習 Part 9
- 8086 彙編學習 Part 2