dagger2依賴注入基本用法

當(dāng)你在創(chuàng)建一個類實例的時候需要其他的支持類實例的支持時骂澄,你可以選擇new一個實例傳入吓蘑,當(dāng)然你也可以選擇依賴注入來簡化你的代碼。舉個最簡單的例子:

public class Cooker{

private CookTool tool坟冲;

public Cooker(CookTool tool){

this.tool= tool;

}

}

顯然磨镶,當(dāng)你想創(chuàng)建一個Cooker類時,你需要CookTool類實例的支持健提,于是你會用new Cooker(new CookTool());這樣的方式來創(chuàng)建Cooker類實例琳猫。但是如果這樣的類似的情況以及創(chuàng)建的類實例的數(shù)量相當(dāng)多的時候就會讓你感到頭疼了,因為這就是寫重復(fù)的代碼私痹。而dagger2就是你的救星脐嫂,它可以在你的合理配置下,幫你自動生動這些代碼紊遵。

經(jīng)過一段時間的了解账千,個人認為dagger2最主要的三個成分是@Inject注解、Component癞蚕、Module蕊爵。@Inject注解用于標記你需要依賴注入的類實例以及該類實例對應(yīng)的構(gòu)造方法,如上述的father桦山。Module的主要功能在于當(dāng)你需要第三方庫里面的類實例時攒射,由于你無法在源碼里面添加@Inject注解醋旦,所以你可以在Module里面先獲取第三方庫的類實例,然后再提供出去(需要@Provides注解)会放,當(dāng)然非第三方庫類你也可以再Module里面創(chuàng)建然后再提供出去饲齐。而對于Component,我們可以形象地將它稱為注射器咧最,它負責(zé)把@Inject和Module提供的類實例注射到你想到的地方捂人。還是上述的例子,假設(shè)我們要把Cooker注入到一個Activity:

第一步:

public class Cooker{

@Inject ??//標記要注入的地方

CookTool tool矢沿;(依賴注入的類不支持private)

@Inject ??//我們需要在Activity里注入Cooker實例

public Cooker(CookTool tool){

this.tool = tool;

}

//測試方法

public String makeFood(String msg){

Log.e("cook","I use "+msg);

}

}

public class CookTool{

@Inject ?//標記對應(yīng)的類構(gòu)造器

public CookTool(){

}

}

上述是dagger2依賴注入的第一種代碼實現(xiàn)滥搭,也就是用@Inject注解,第二種是用Module:

@Module ?//新建一個Module類捣鲸,記住要用@Module注解

public class BaseActivityModule{

//Module的構(gòu)造器

public BaseActivityModule(){

}

@Provides ?//提供注解

Cooker getCooker(){ ?//方法名隨意瑟匆,類型必須正確

return new Cooker(new CookTool());

}

}

第二步,創(chuàng)建Component:

@Sington @Component ?//返回單例栽惶,記得用@Component注解

(modules= {BaseActivityModule.class}) ?//將需要的Module包含進來

public class BaseActivityComponent{

void inject(BaseActivity baseActivity) //注射到BaseActivity

}

第三步,依賴注入:

public BaseActivity extends AppCompatActivity{

BaseActivityComponent component;

@Inject

Cooker cooker愁溜;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState){

//DaggerBaseActivityComponent是自動生成的,rebuild project之后可以查看外厂,dagger2用的是builder模式

component = DaggerBaseActivityComponent.builder().

BaseActivityModule(new BaseActivityModule()).build();

component.inject(this); ?//依賴注入冕象,對應(yīng)上面的BaseActivityComponent

cooker.makeFood("knife");

}

}

上述三步缺一不可,運行之后查看日志就能知道咱們的依賴注入的目的是否達成了汁蝶。這里需要注意的是渐扮,dagger2在尋找依賴提供的時候會優(yōu)先選擇Module提供的依賴,然后再是@Inject提供的依賴穿仪,還有一點是上述給出的例子其實是一個遞歸依賴注入(將CookTool注入Cooker,再將注入好的Cooker注入Activity),希望大家注意掌握與運用席爽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啊片,隨后出現(xiàn)的幾起案子只锻,更是在濱河造成了極大的恐慌,老刑警劉巖紫谷,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齐饮,死亡現(xiàn)場離奇詭異,居然都是意外死亡笤昨,警方通過查閱死者的電腦和手機祖驱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞒窒,“玉大人捺僻,你說我怎么就攤上這事。” “怎么了匕坯?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵束昵,是天一觀的道長。 經(jīng)常有香客問我葛峻,道長锹雏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任术奖,我火速辦了婚禮礁遵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘采记。我一直安慰自己佣耐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布挺庞。 她就那樣靜靜地躺著晰赞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪选侨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天然走,我揣著相機與錄音援制,去河邊找鬼。 笑死芍瑞,一個胖子當(dāng)著我的面吹牛晨仑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆檬,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼洪己,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竟贯?” 一聲冷哼從身側(cè)響起答捕,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屑那,沒想到半個月后拱镐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡持际,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年沃琅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜘欲。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡益眉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郭脂,我是刑警寧澤空繁,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站朱庆,受9級特大地震影響盛泡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娱颊,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一傲诵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箱硕,春花似錦拴竹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惠昔,卻和暖如春幕与,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镇防。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工啦鸣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人来氧。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓诫给,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啦扬。 傳聞我的和親對象是個殘疾皇子中狂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容