官方架構例子,裏面有個dagger2的結合的例子android
https://github.com/googlesamples/android-architecturegit
https://google.github.io/daggergithub
Dagger2 經過註解來生成代碼,定義不一樣的角色,主要的註解有:@Inject、@Module 、@Component 、@Provides 、@Scope 、@SubComponent 等。架構
@Inject: 一般在須要依賴的地方使用這個註解。換句話說,你用它告訴Dagger這個類或者字段須要依賴注入。這樣,Dagger就會構造一個這個類的實例並知足他們的依賴。
@Module: Modules類裏面的方法專門提供依賴,因此咱們定義一個類,用@Module註解,這樣Dagger在構造類的實例的時候,就知道從哪裏去找到須要的 依賴。modules的一個重要特徵是它們設計爲分區並組合在一塊兒(好比說,在咱們的app中能夠有多個組成在一塊兒的modules)。
@Provides: 在modules中,咱們定義的方法是用這個註解,以此來告訴Dagger咱們想要構造對象並提供這些依賴。
@Component: Components從根本上來講就是一個注入器,也能夠說是@Inject和@Module的橋樑,它的主要做用就是鏈接這兩個部分。 Components能夠提供全部定義了的類型的實例,好比:咱們必須用@Component註解一個接口而後列出全部的 @Modules組成該組件,如 果缺失了任何一塊都會在編譯的時候報錯。全部的組件均可以經過它的modules知道依賴的範圍。
@Scope: Scopes但是很是的有用,Dagger2能夠經過自定義註解限定註解做用域。後面會演示一個例子,這是一個很是強大的特色,由於就如前面說的同樣,不必讓每一個對象都去了解如何管理他們的實例。app
簡單地說,經過對象類型傳遞 對象以來, 經過 module和 provides 提供對象 ,component中 若要注入當前對象 提供個 inject(MainActivity )方法ide
對於component類 除了inject 其它方法的做用:函數
1.能夠將A模塊中(provides註解)的對象給B模塊(某個函數的 形參)使用,暴露方法共用,經過component做爲中間橋樑google
2.component 其方法的返回值 通常來自於 依賴的模塊 提供的, make project後,當生成 DaggerComponent以後可供外部調用。設計
3.若component中的返回類型對象A,從子模塊 的provides 提供的註解 沒有找到類型一致的對象類型A時,可從A對象的構造函數查找下 應該有個@inject 從外部注入的,裏面的形參 確定能夠在 子模塊中找到。component
4.不容許 @provides 返回的參數 與形參類型同樣,這樣會死循環,形參 是從 返回的參數那邊找來 注入的。