Android java 解耦框架注解Dagger2

参考文档

  • dagger2让你爱不释手-基础依赖注入框架

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
  1. @Module:用于标注一个类,表明这是一个Module,而不是一个普通的类。Module就是生产Dependency的地方。
  2. @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的方法

你可能感兴趣的:(Android java 解耦框架注解Dagger2)