Dagger是一款優(yōu)秀的注入框架,但是它是怎么實(shí)現(xiàn)依賴注入的呢摹恨,或者說,為什么通過Component,Module,以及@Inject等關(guān)鍵字就可以實(shí)現(xiàn)自動(dòng)注入呢?我們將通過Dagger自動(dòng)生成的注入代碼觀察其工作原理双戳。
Dagger基礎(chǔ)概念
1.1: @Component
Components從根本上來說就是一個(gè)注入器邪驮,也可以說是@Inject和@Module的橋梁喻粹,它的主要作用就是連接這兩個(gè)部分。 Components可以提供所有定義了的類型的實(shí)例棚亩,比如:我們必須用@Component注解一個(gè)接口然后列出所有的@Modules組成該組件修然,如 果缺失了任何一塊都會(huì)在編譯的時(shí)候報(bào)錯(cuò)。所有的組件都可以通過它的modules知道依賴的范圍。
1.2: @Module
Modules類里面的方法專門提供依賴枝秤,所以我們定義一個(gè)類菌赖,用@Module注解,這樣Dagger在構(gòu)造類的實(shí)例的時(shí)候到逊,就知道從哪里去找到需要的 依賴他炊。modules的一個(gè)重要特征是它們設(shè)計(jì)為分區(qū)并組合在一起(比如說痊末,在我們的app中可以有多個(gè)組成在一起的modules)凿叠。
1.3: @Provider
在modules中,我們用這個(gè)注解來修飾具體的方法,以此來告訴Dagger我們想要構(gòu)造方法返回的對象并提供將此提供依賴誊稚。
1.4: @Inject
我們通常在需要依賴的地方使用這個(gè)注解俏脊。你用它告訴Dagger這個(gè)類或者字段需要依賴注入补憾。這樣启昧,Dagger就會(huì)構(gòu)造一個(gè)這個(gè)類的實(shí)例并滿足他們的依賴。
1.5: @Scope:
Dagger2可以通過自定義注解限定注解作用域座柱。在具體的代碼過程中教硫,我們沒必要讓每個(gè)對象都去了解如何管理他們的實(shí)例叨吮。使用該注解,將限定其存活時(shí)間瞬矩。簡單來說就是我們可以定義所有范圍的粒度茶鉴。Dagger結(jié)構(gòu)
本章將Dagger的基本概念以及結(jié)構(gòu)做一個(gè)大概的介紹,讓初識(shí)或者未接觸Dagger的朋友一個(gè)大概的印象景用,下章將具體講解Dagger的注入工作原理涵叮。