Dagger2原理及使用

小夥伴們,又到週一啦,收拾好心情,準備工作了嗎?

今天跟大家一起來聊一聊Dagger2

Dagger2原理及使用

git地址:https://github.com/google/dagger

Dagger,起源於Square的Dagger,Dagger2是由谷歌接手開發;

它是一個完全在編譯期間進行的依賴注入框架,完全去除了反射;

Dagger2通過依賴注入,讓我們少寫很多公式化代碼,更容易測試,降低耦合,創建可複用可互換的模塊;

說到依賴注入,很多小夥伴可能想到Bufferknife,那麼他們之間的區別是什麼呢?

Buffer knife目的爲注入到view,所以能夠在非activity裏面注入,也能注入到inflate的views;

而Dagger能夠注入到任何你想要的對象,只要其在module類中,或者它是構造器。但是缺少對方法和字段的注入支持;

Buffer knife只是避免樣板代碼,findViewById,僅此而已,所以不能算是一個真正的注入。只是一個view的代言。

Dagger2的優勢:

1、全局對象實例的簡單訪問方式:

和ButterKnife 庫定義了view,事件處理以及資源的引用一樣,Dagger2 提供全局對象引用的簡易訪問方式。聲明瞭單例的實例都可以使用@inject進行訪問;

2、複雜的依賴關係只需要簡單的配置

Dagger2 會通過依賴關係並且生成易懂易分析的代碼。以前通過手寫的大量模板代碼中的對象引用將會由它給你創建並傳遞到相應對象中。因此你可以更多的關注模塊中構建的內容而不是模塊中的對象實例的創建順序。

3、讓單元測試和集成測試更加方便

因爲依賴關係已經爲我們獨立出來,所以我們可以輕鬆的抽取出不同的模塊進行測試。

4、作用域實例(Scoped instances)

我們不僅可以輕鬆的管理全局實例對象,也可以使用Dagger2中的scope定義不同的作用域

接下來,我們看看Dagger2的使用吧:

1、在app目錄下的gradle文件中加入:
Dagger2原理及使用

2、創建類Test01:
Dagger2原理及使用

@Inject:註解標識,表明它需要提供依賴

3、新建Component標註的接口
Dagger2原理及使用

@Component:依賴注入的管理類,也是連接依賴(A類)與目標類(MainActivity類)的橋樑;

3、在以上兩個步驟完成後,需要build一下工程,會自動生成接口的實現類,命名爲DaggerXXX.class,其中XXX爲你定義接口的名字:
Dagger2原理及使用

4、最後在MainActivity中使用:
Dagger2原理及使用

假如我們使用第三方庫,不能修改源碼,無法在構造方法中通過@Inject註解的方式提供依賴,這種情況下,我們該如何處理?

1、假如類名爲Per的類爲第三方庫,不能修改源碼
我們首先創建一個可以提供實例的類,類名如叫PerModule:
Dagger2原理及使用

@Module:通過此標註的類,可以另一種方式提供依賴

@Provide:通過此標註註解的方法,需要返回提供依賴的實例

2、把Module加入到Component中,即用@Component標註的接口中:
Dagger2原理及使用

3、在MainActivity中引用與上一種操作一致。

Dagger2確實達到了模塊間的解耦,使用Dagger2可以將MVP中的V 層與P層進一步解耦,這樣便可以提高代碼的健壯性和可維護性;

Dagger2還有很多更加強大的用法......

不說了,我要去啃代碼了;文中有誤請留言指出,喜歡就動動手指關注我們哦!

Dagger2原理及使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章