@Inject 提供依賴的構造函數,或者須要依賴的成員變量git
@Module 提供依賴,實例化的地方( 使用module實例化,方便測試的時候替換成其餘對象,而這也是和構造方法注入的區別,若是用構造方法注入,則作不到測試的時候隨意替換)github
@Component 一個鏈接者,把module和須要依賴的地方鏈接起來函數
步驟1:查找Module中是否存在建立該類的方法。
步驟2:若存在建立類方法,查看該方法是否存在參數
步驟2.1:若存在參數,則按從步驟1開始依次初始化每一個參數
步驟2.2:若不存在參數,則直接初始化該類實例,一次依賴注入到此結束
步驟3:若不存在建立類方法,則查找Inject註解的構造函數,看構造函數是否存在參數
步驟3.1:若存在參數,則從步驟1開始依次初始化每一個參數
步驟3.2:若不存在參數,則直接初始化該類實例,一次依賴注入到此結束
singleton scope can not be used in unscope component測試
beforespa
after3d
void inject(Activity aty); void inject(Fragment fragment);code
per activity(每一個Activity一個Activity)component
https://github.com/chiuki/friendspell chiuki寫的,包含了dagger2與測試對象