參考文檔
Dagger工作原理
dagger2的工作原理是刹勃,在你的java代碼編譯成字節(jié)碼的過程中矾飞,dagger2會(huì)對(duì)所有的Component(就是用 @Component修飾過的interface)進(jìn)行處理籍救,自動(dòng)生成一個(gè)實(shí)現(xiàn)了這個(gè)interface的類角塑,生成的類名是Component的名字前面加上“Dagger”捞附。比如我們定義的 AppComponent祝拯,對(duì)應(yīng)的自動(dòng)生成的類叫做DaggerAppComponent。我們知道温算,實(shí)現(xiàn)一個(gè)interface需要實(shí)現(xiàn)里面的所有方法怜校,因此,DaggerAppComponent是實(shí)現(xiàn)了 loginPresenter();這個(gè)方法的注竿。
實(shí)現(xiàn)的方式大致就是從 AppComponent管理的 AppModule里面去找LoginPresenter的Provider方法茄茁,然后調(diào)用這個(gè)方法,返回一個(gè)LoginPresenter巩割。
Dagger2的重要角色
實(shí)例看鏈接: http://www.reibang.com/p/1d52fde638cf
生產(chǎn)Dependency的工廠:Module
- @Module:用于標(biāo)注一個(gè)類裙顽,表明這是一個(gè)Module,而不是一個(gè)普通的類宣谈。Module就是生產(chǎn)Dependency的地方愈犹。
- @Provides:用于標(biāo)注 @Module標(biāo)注類中 方法的,表明這個(gè)方法是用來生產(chǎn)Dependency的闻丑,這個(gè)方法叫做Provider方法漩怎。(因?yàn)橐粋€(gè)Module也可以有一些正常的方法)。
Dependency工廠管理員:Component
跟Module不同的是梆掸,我們?cè)趯?shí)現(xiàn)Component時(shí)扬卷,不是定義一個(gè)類,而是定義一個(gè)接口(interface):
@Component(modules={AppModule.class})
@Singleton
public interface AppComponent {
void inject(LoginActivity loginActivity);
}
modules屬性接收一個(gè)數(shù)組酸钦,里面是這個(gè)Component管理的所有Module怪得。在上面的例子中,AppComponent只管理AppModule一個(gè)卑硫。
Component給Client提供Dependency的方法
前面我們講了Module和Component的實(shí)現(xiàn)徒恋,接下來就是Component怎么給Client提供Dependency的問題了。一般來說欢伏,有兩種入挣,當(dāng)然總共不止這兩種,只不過這兩種最常用硝拧,也最好理解径筏,一般來說用這兩種就夠了,因此這里不贅述其他的方法障陶。
方法一:在Component里面定義一個(gè)返回Dependency的方法