依賴注入

1.什么是依賴注入

DI ,簡單的講广凸,講對象創(chuàng)建的過程交給容器阅茶,在需要的時候直接去拿,而不是代碼中創(chuàng)建谅海。是ioc的一種實現(xiàn)方式脸哀。
在 Java 領域中,我們就有 Spring扭吁、Guice 以及最近的 Dagger撞蜂。
參考這篇文章:依賴注入和控制反轉的理解白筹,寫的太好了

2.為什么使用這個技術

1.降低代碼之間的耦合,主要是一個類中創(chuàng)建另一個類谅摄,構成相互依賴的情況。
2.便于測試

3.Android 中的注入框架

3.1 Dragger2

3.1.1 介紹
Dagger 得名于樹狀結構的依賴系馆。能更準確地記住這是個依賴圖送漠,實際上是有向無環(huán)圖,或者說是 DAG由蘑,因此取名為 DAGger闽寡。
Google 的一個團隊還是決定做些改進,所以他們創(chuàng)造了 Dagger 2尼酿。
Dagger 2在編譯時完成了更多的工作爷狈,也很好地移除了反射,最后還能生成比最初版本Dagger 更容易調試的代碼裳擎。
它使得開發(fā)效率更高涎永,省去創(chuàng)建對象的過程,代碼充分解耦鹿响,同時可以更好的管理生命周期
_3.1.2 使用介紹
@Compone inject 和Module的橋梁羡微,是一個接口,定義了需要實例的類型惶我;
@inject Dragger2會構造它的實例以滿足依賴的需求;
@Module 將一個類進行module注解妈倔,編譯器就會在這個類進行查找需要的依賴實例。多個module相互分離绸贡,組合在一起使用盯蝴;
@Provide 在module內使用,告訴編譯器需要如何進行構造听怕;
@Scope 非常強大的功能捧挺,可以通過自定義注解來管理生命周期,比如使用--------@PerFragment @PerActivity @PerUser等尿瞭;
@Qualifier 當注入的參數(shù)不足以滿足依賴的時候使用松忍,比如context ,可以自定義qualifier annotation 比如 @ForActiivty,@ForApplication

@Inject Inject主要有兩個作用,一個是使用在構造函數(shù)上筷厘,通過標記構造函數(shù)讓Dagger2來使用(Dagger2通過Inject標記可以在需要這個類實 例的時候來找到這個構造函數(shù)并把相關實例new出來)從而提供依賴鸣峭,另一個作用就是標記在需要依賴的變量讓Dagger2為其提供依賴。

@Provide 用Provide來標注一個方法酥艳,該方法可以在需要提供依賴時被調用摊溶,從而把預先提供好的對象當做依賴給標注了@Injection的變量賦值。provide主要用于標注Module里的方法

@Module 用Module標注的類是專門用來提供依賴的充石。有的人可能有些疑惑莫换,看了上面的@Inject,需要在構造函數(shù)上標記才能提供依賴,那么如果我們需要提供 的類構造函數(shù)無法修改怎么辦拉岁,比如一些jar包里的類坷剧,我們無法修改源碼。這時候就需要使用Module了喊暖。Module可以給不能修改源碼的類提供依 賴惫企,當然,能用Inject標注的通過Module也可以提供依賴

@Component Component一般用來標注接口陵叽,被標注了Component的接口在編譯時會產(chǎn)生相應的類的實例來作為提供依賴方和需要依賴方之間的橋梁狞尔,把相關依賴注入到其中。

3.3.3 くぞ 
① build.gradle

apply plugin: 'com.neenbedankt.android-apt'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
dependencies {
apt 'com.google.dagger:dagger-compiler:2.0'
compile 'com.google.dagger:dagger:2.0'
provided 'javax.annotation:jsr250-api:1.0'
...
}
淺析Dagger2的使用
Dagger2 最清晰的使用教程
_1.@inject @component
_2.@provided @module

3.2 Butterknife

3.2.1 介紹
3.2.2 使用

Android 如何編寫基于編譯時注解的項目

Reference
Android中的依賴注入
Tasting Dagger 2 on Android
dragger2-git-sample
Android注解快速入門和實用解析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末巩掺,一起剝皮案震驚了整個濱河市偏序,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胖替,老刑警劉巖研儒,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異独令,居然都是意外死亡殉摔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門记焊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逸月,“玉大人,你說我怎么就攤上這事遍膜⊥胗玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵瓢颅,是天一觀的道長恩尾。 經(jīng)常有香客問我,道長挽懦,這世上最難降的妖魔是什么翰意? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮信柿,結果婚禮上冀偶,老公的妹妹穿的比我還像新娘。我一直安慰自己渔嚷,他們只是感情好进鸠,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著形病,像睡著了一般客年。 火紅的嫁衣襯著肌膚如雪霞幅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天量瓜,我揣著相機與錄音司恳,去河邊找鬼。 笑死绍傲,一個胖子當著我的面吹牛扔傅,可吹牛的內容都是我干的。 我是一名探鬼主播唧取,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼划提!你這毒婦竟也來了枫弟?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹏往,失蹤者是張志新(化名)和其女友劉穎淡诗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伊履,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡韩容,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唐瀑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片群凶。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哄辣,靈堂內的尸體忽然破棺而出请梢,到底是詐尸還是另有隱情,我是刑警寧澤力穗,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布毅弧,位于F島的核電站,受9級特大地震影響当窗,放射性物質發(fā)生泄漏够坐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一崖面、第九天 我趴在偏房一處隱蔽的房頂上張望元咙。 院中可真熱鬧,春花似錦巫员、人聲如沸蛾坯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脉课。三九已至救军,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倘零,已是汗流浹背唱遭。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呈驶,地道東北人拷泽。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像袖瞻,于是被迫代替她去往敵國和親司致。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容