依賴注入之Dagger2學習總結

2021-09-26 03:01:13 字數 1485 閱讀 9041

一直認為,任何框架和理論的誕生,一定是為了解決某種特定或者一類共性的場景,沒有任何場景做依託的框架是沒有價值的。同理,在專案進行技術選型,框架選擇的時候,所選的框架一定是滿足使用場景中最方便的框架(請原諒沒有使用最佳這個詞,每個人對於場景的理解不同,且同一種程式設計思想,能有多種框架選擇,很難說那個是最好的,故使用最方便)。

1.控制反轉和依賴注入

學習dagger2之前首先得弄明白兩個概念,控制反轉和依賴注入。

控制反轉(inversion of control,縮寫為ioc),是物件導向程式設計中的一種設計原則,可以用來減低計算機**之間的耦合度。其中最常見的方式叫做依賴注入(dependency injection,簡稱di),還有一種方式叫「依賴查詢」(dependency lookup)。通過控制反轉,物件在被建立的時候,由乙個調控系統內所有物件的外界實體將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。

先說乙個場景:在寫**的時候常常遇到一種情況,就是需要使用到工具類,工具類裡面又會引入其他工具類,但是無法保證某個工具類的建構函式一成不變,可能剛開始是乙個無參的建構函式,後面需要變成乙個有參的建構函式(最常見的是需要乙個context),這時候是不是需要對所有建立該類物件的**進行修改了(多型也可以解決這個問題,但是使用的時候要考慮使用哪種建構函式,總是不方便)。

針對這個場景,首先想到的就是要**解耦,要解耦是否可以設計乙個「容器」,通過「容器」一定可以拿到需要的物件,而不去關心它的實現。任何變化,只需要修改容器裡的實現方法就行了。乍一看這不就是設計模式裡的工廠模式呢,但是他倆不是乙個概念,乙個是設計思路,乙個是設計模式

場景和思路描述完了,就講講控制反轉了

控制反轉,顧名思義,就是在過去呼叫者在使用被呼叫者的時候,通常是呼叫者主動建立被呼叫者的例項,而現在改為被呼叫者的建立工作不再由呼叫者執行。(這段是網上找的說明,個人認為說白了,就是過去是主動建立,而控制反轉是被動獲取乙個需要的物件,怎麼建立的無需使用者關心,基本上是框架來實現,主動變被動了)。

依賴注入就是實現控制反轉的一種方式,dragger2又是實現依賴注入的一種框架。

看著解釋雲裡霧裡的, 其實簡單講就是為了實現解耦。

下面講講怎麼使用dragger2:

compile"com.google.dagger:dagger:2.14.1"

annotationprocessor"com.google.dagger:dagger-compiler:2.14.1"

在專案中加入上面兩句或者下面兩句都行

implementation librariesdependencies.dagger

annotationprocessor librariesdependencies.daggercompiler

加入引用就可以在專案中使用了

Dagger2依賴注入框架的使用簡介

配置apt外掛程式 在build.gradle project 中新增如下 dependencies 新增如下 應用apt外掛程式 com.neenbedankt.android apt dependencies 別忘了加入lint warning android public class main...

依賴注入之Dagger2框架在工程中的使用

在介紹dagger2之前,了解一下使用dagger2的背景 一般情況下,例項man包含到例項car,則例項man依賴例項car。如下圖1 這種直接依賴的情況存在不好的情況,若car建構函式變化,則需要直接修改man類。使用依賴注入用於實現控制反轉的常用方式。控制反轉的基本思想是 借助 第三方 實現具...

Dagger2學習筆記

dagger需要注入依賴的地方,需要 inject的註解,共有三種inject方式 identifies injectable constructors,methods,and fields.constructors首先被注入,然後是method和field,父類中的method和field會先於子...