Android 四大天王之 Dagger (1)

先回顧一下歷史吧,dagger2 這把利器,確切地應該叫做 inject。每個分享依賴注入的專家都會拿出“煮咖啡”這個例項來打比方來講解依賴注入。要煮咖啡就需要咖啡️,那麼我們就先來談一談咖啡。
本人很愛喝咖啡,多半是為了 coding,以後有時間,測試一下邊咖啡邊 coding,到底能提高多少效率。端起咖啡杯思考,放下咖啡杯 coding。其實不是的就是為了提神。小時候考試前複習時,晚上總喜歡準備點花生米和茶水,覺得這樣才像樣。轉眼那些畫面無法再回放,所以每個人都需要珍惜現在的每一幅畫面,珍惜身邊的一切。遇到 bug ,受到懷疑的目光,不要理會,勇敢向前,不煩惱,不氣餒做個真我。怎麼樣我的思維跳躍不,請跟緊。
我們今天分享的是,又一個 Android 開發必備庫 Dagger。開始前還想囉嗦兩句有關面向物件程式設計的事,個人喜歡函數語言程式設計,可能僅僅因為他是花生米和茶水,這裡有點抽象,不用理解,往下走。
其實所有 coding 都可以寫在一起。不過也就沒有可讀性,和團隊開發什麼事了。面向物件本質是一種組織程式碼的方式,這樣程式碼易於理解程式碼,不要認為他是把我們的程式碼面向顯示物件,這裡的面向物件程式設計,應該理解一切基於物件組織您的程式碼。面向介面程式設計,面向切面程式設計,都是基於的意思比較多。
我們把程式碼切割成一個一個物件,一個一個單元,好處可以重複用程式碼塊,並行開發。這是面向物件的目標。這是本人自己對面向物件的理解,可能會有誤區。角度不同可能看法有不同,堅持自己就好。
這麼物件組合一起來完成應用,他們彼此之間一定不是孤立的,而是互相聯絡,如果那個物件脫離隊伍,那麼他就沒有存在的意義。而且這種聯絡還是隨著應用複雜而錯綜複雜,這一點想必大家都清楚。
好回到正題,煮咖啡,談 dagger2。
追述最早聽到依賴注入的概念,還是學習spring 的時候,這是 spring 當年引以自豪的特點。不過在 Spring 中,是通過配置 xml 檔案來實現依賴注入,XML 中定義出依賴關係。配置 xml 比較繁瑣,並且不屬於編碼範疇部分的而外工作,更大的問題是,使用了反射機制,所以只有在執行時才能測試和 debug,這樣很麻煩。大家不能忽視測試呀,測試是唯一讓你擺脫你加班的一個有效的解決方案。我們用的不好並不等於測試沒有用。
今天先簡單說一下 dagger 流程,是怎麼將要被注入的物件注入到的他目標類中正確位置,程式碼部分可以參照《我們一起學 Dagger2 (1)》,其實這篇文章是對《我們一起學 Dagger2 (1)》延續。先整理一下思路
1. 準備要被注入的類(module)
2. 對要注入到位置進行標示(@inject)
3. 將事前準備好的例項化好的物件放置到要注入的位置(component)
1. 有關如何準備要注入物件,在 《我們一起學 Dagger2 (1)》 已經通過程式碼做出了的解釋,這裡暫時不補充了。
2. 我們的類可以注入到位置包括,類的建構函式、方法和屬性。
1. 將物件注入到建構函式,只需要在建構函式新增 @Inject ,注意要保證的建構函式為public,這樣準備好的依賴就會作為建構函式的引數注入使用,注入的物件可以作為類的 final 欄位和私有欄位使用。
2. 方法注入,本人沒有實踐過,就不給出建議了,就說一點,可以將物件作為方法的引數注入,不過注入的時機是在物件完全例項化後才能注入。
3. 屬性注入,用的比較多,因為最近做的 Android 專案中,Acttivity 是系統建立的,所以我們通過屬性注入,方法也是在 @Inject 加欄位上,我們就無需賦值這個屬性,這個屬性不能是 private 和 final,因為這樣就無法注入了,在隨後將 Dagger2 注入機制時,大家就會明瞭為什麼這樣做。注入的時機也是在物件完全例項化後才能注入。