参考文档
Dagger工作原理
dagger2的工作原理是,在你的java代码编译成字节码的过程中,dagger2会对所有的Component(就是用 @Component修饰过的interface)进行处理,自动生成一个实现了这个interface的类,生成的类名是Component的名字前面加上“Dagger”。比如我们定义的 AppComponent,对应的自动生成的类叫做DaggerAppComponent。我们知道,实现一个interface需要实现里面的所有方法,因此,DaggerAppComponent是实现了 loginPresenter();这个方法的。
实现的方式大致就是从 AppComponent管理的 AppModule里面去找LoginPresenter的Provider方法,然后调用这个方法,返回一个LoginPresenter。
Dagger2的重要角色
实例看链接: http://www.jianshu.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的方法