您好,登錄后才能下訂單哦!
小伙伴們,又到周一啦,收拾好心情,準備工作了嗎?
今天跟大家一起來聊一聊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文件中加入:
2、創建類Test01:
@Inject:注解標識,表明它需要提供依賴
3、新建Component標注的接口
@Component:依賴注入的管理類,也是連接依賴(A類)與目標類(MainActivity類)的橋梁;
3、在以上兩個步驟完成后,需要build一下工程,會自動生成接口的實現類,命名為DaggerXXX.class,其中XXX為你定義接口的名字:
4、最后在MainActivity中使用:
假如我們使用第三方庫,不能修改源碼,無法在構造方法中通過@Inject注解的方式提供依賴,這種情況下,我們該如何處理?
1、假如類名為Per的類為第三方庫,不能修改源碼
我們首先創建一個可以提供實例的類,類名如叫PerModule:
@Module:通過此標注的類,可以另一種方式提供依賴
@Provide:通過此標注注解的方法,需要返回提供依賴的實例
2、把Module加入到Component中,即用@Component標注的接口中:
3、在MainActivity中引用與上一種操作一致。
Dagger2確實達到了模塊間的解耦,使用Dagger2可以將MVP中的V 層與P層進一步解耦,這樣便可以提高代碼的健壯性和可維護性;
Dagger2還有很多更加強大的用法......
不說了,我要去啃代碼了;文中有誤請留言指出,喜歡就動動手指關注我們哦!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。