參考文檔
Dagger工作原理
dagger2的工作原理是,在你的java代碼編譯成字節碼的過程中,dagger2會對所有的Component(就是用 @Component修飾過的interface)進行處理,自動生成一個實現了這個interface的類,生成的類名是Component的名字前面加上“Dagger”。比如我們定義的 AppComponent,對應的自動生成的類叫做DaggerAppComponent。我們知道,實現一個interface需要實現里面的所有方法,因此,DaggerAppComponent是實現了 loginPresenter();這個方法的。
實現的方式大致就是從 AppComponent管理的 AppModule里面去找LoginPresenter的Provider方法,然后調用這個方法,返回一個LoginPresenter。
Dagger2的重要角色
實例看鏈接: http://www.lxweimin.com/p/1d52fde638cf
生產Dependency的工廠:Module
- @Module:用于標注一個類,表明這是一個Module,而不是一個普通的類。Module就是生產Dependency的地方。
- @Provides:用于標注 @Module標注類中 方法的,表明這個方法是用來生產Dependency的,這個方法叫做Provider方法。(因為一個Module也可以有一些正常的方法)。
Dependency工廠管理員:Component
跟Module不同的是,我們在實現Component時,不是定義一個類,而是定義一個接口(interface):
@Component(modules={AppModule.class})
@Singleton
public interface AppComponent {
void inject(LoginActivity loginActivity);
}
modules屬性接收一個數組,里面是這個Component管理的所有Module。在上面的例子中,AppComponent只管理AppModule一個。
Component給Client提供Dependency的方法
前面我們講了Module和Component的實現,接下來就是Component怎么給Client提供Dependency的問題了。一般來說,有兩種,當然總共不止這兩種,只不過這兩種最常用,也最好理解,一般來說用這兩種就夠了,因此這里不贅述其他的方法。
方法一:在Component里面定義一個返回Dependency的方法