我之前在網上找了一些dagger2文章,找到非常多的文章,但是大部分都是非常的難懂,對于我這種連依賴注入是什么都不懂的小白而言,然后學習計劃就被擱置,當我又準備學習Dagger2時也是花了較大的成本才有了一個較清晰的了解,然而當我了解清除后我覺得花費這么大的時間和難度成本去學習它并不是很成比例因為它本身并不是很復雜的一個東西,那么是什么原因呢,看了很多文章我認為大部分人寫文章都很難以一個小白的角度去介紹它,文章里面的專業(yè)屬于都要理解很久,這造成了學習的成本非常大.
好了,現(xiàn)在開始正式開啟Dagger2神秘的大門...
首先我們知道依賴注入這個概念,我們看一下百科解釋的一段代碼
classA
{
AInterface a;
A () {
}
AMethod(){//一個方法
{
a = new AInterfaceImp();
}
}
我們知道編碼較好的方式一般是接口化編程,因為一般它的耦合度比較輕,為什么呢?比如我們上面的例子, AInterface是一個接口,我們創(chuàng)建一個AInterfaceImp類去實現(xiàn)它,那么我們在其他地方調用AInterfaceImp的方法只需要一個AInterface引用去指向我們實現(xiàn)的具體類,然后去調用AInterface的方法就可以了,這樣的好處是當以后我們需要變動AInterface方法的實現(xiàn)方式只需要改變AInterface的引用對象就可以了完全可以不用更改調用者調用的相關代碼。
雖然這種方式挺好的,但是你有沒有想過,我們最終還是需要在調用者代碼里面使用這種方式a = new AInterfaceImp();去創(chuàng)建對象,那么問題來了,如果我改變了AInterfaceImp的構造那么我還要去調用的地方改動相應代碼?可能有人會說了,不就是改變一下代碼么,a = new AInterfaceImp();變成a = new AInterfaceImp(String str);不是so easy這有什么問題?
不錯如果調用的地方只是這么一個那么找到并修改它是so easy,假如我們的業(yè)務非常復雜,我們需要創(chuàng)建很多這樣的功能,我們又在一個類里面調用了十幾個甚至幾十個這樣對象(別驚訝,google的官方app管理這些調用的代碼就有3000多行),那么我們就要創(chuàng)建這么多的對象,那么當我們豈不是要去一一進行更改,這無疑增加了我們的勞動成本,有這些多余的時間我豈不是要留在公司加班而不能去打王者了。。
No,這個時候我們迫切希望有這么一種方式,我可不可以在調用的類里面去申明一個被調用者的成員變量,這個被調用者不需要調用者去生成,它由專門的類去自動生成,我們只需要把調用者對象傳給它,當它生成好后就可以把生成好的被調用者對象注入到調用者的成員變量里,這就是所謂的依賴注入。
這種方式自己去實現(xiàn)還是有點麻煩的(好吧我承認我懶),好在早就有人想到這種問題。Dagger1由Square公司受到Guice啟發(fā)創(chuàng)建,現(xiàn)在經Google接手開發(fā)并升級為Dagger2,解決了Dagger1很多不能解決的問題.Dagger就是解決這種問題而誕生的依賴注入框架。
下篇我準備先介紹Dagger2的詳細使用在分析具體源碼是怎么實現(xiàn)的,敬請關注你所看到最輕松的Dagger2講解(使用方式)