轉(zhuǎn)載地址:http://fanxu.me/post/2015-10-29
Dagger2 是Google在Square的Dagger基礎(chǔ)上擴(kuò)展的依賴注入組件喧兄,從Dagger1轉(zhuǎn)到Dagger2,會(huì)有一些不一致的地方偎血,但總體來說霸株,Dagger2較Dagger1優(yōu)化了非常多雕沉。
本文就Dagger2 與Dagger1的不同做些簡(jiǎn)述。 由于還沒有正式使用Dagger2去件,所述觀點(diǎn)可能有所偏頗坡椒,歡迎拍磚扰路。
生成代碼
與一代不同,Dagger2會(huì)生成一堆輔助代碼肠牲,如下圖幼衰。
雖然犧牲了動(dòng)態(tài)特性,但Dagger2的生成代碼使得其極易調(diào)試缀雳,閱讀和分析都非常方便渡嚣。
Component
Dagger2新增了Component,作為Module和Inject對(duì)象之間的橋梁肥印。
與Dagger1不同识椰,Dagger2中所有的對(duì)象,必須要與明確的@Inject Contructor才會(huì)自動(dòng)構(gòu)建深碱,否則必須按照Component進(jìn)行注入腹鹉。這樣做,雖然會(huì)少許有些不方便敷硅,但代碼的可讀性提高了很多功咒,較容易理解。
Singleton
Dagger2支持Singleton屬性绞蹦,支持在Provides方法和類頭部添加力奋,其含義也是單例。
但必須在Component上也聲明為Singleton, 這個(gè)有點(diǎn)比較難以理解幽七。
Scope
Dagger2添加了Scope特性景殷,可以給定對(duì)象的存活區(qū)域,這個(gè)對(duì)于Android編程非常有利澡屡。
總結(jié)
總體來說猿挚,Dagger2 比較容易理解,生成的代碼也很方便驶鹉。
其他內(nèi)容等后續(xù)逐漸使用绩蜻,再行補(bǔ)充。
自己搞了一個(gè)java的Demo梁厉,https://github.com/fanxu123/Dagger2Demo
Links
http://frogermcs.github.io/dependency-injection-with-dagger-2-introdution-to-di/
http://frogermcs.github.io/dependency-injection-with-dagger-2-the-api/
http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/
http://frogermcs.github.io/dagger-graph-creation-performance/