目录:andorid jar/库源码解析 html
一、用于解耦Activity和业务逻辑ide
二、在使用业务的时候,不须要重复编写new代码。函数
三、当业务变化的时候,不须要对全部的UI,进行修改。测试
四、便于测试,和正式,替换指定Module便可。ui
须要:this
一、定义 CommonComponent 的接口 标记 @Component(modules = XXXModule.class) 的注解google
二、定义XXXModule 模块,并标注 @Module 的注解 ,对添加的方法使用 provide开头,这些 provide方法须要添加 @Provides注解spa
A业务类:code
构造函数使用 @Inject 注解htm
B页面:
一、定义A业务类的变量,使用@Inject注解
二、在OnCreate中,使用以下代码进行初始调用
DaggerCommonComponent.builder().commonModule(new CommonModule(this)).build().inject(this);
三、DaggerCommonComponent由,使用Dagger自动生成的类(Dagger使用APT技术实现),使用apt生成以下代码
编译以后查看APK是下面这样(红色部分为自动生成)
四、而后就能够使用了。。。。
①:建立一个 DaggerCommonComponent$Builder对象,用于接收 CommonModule 和返回 CommonComponent的接口对象
②:建立一个 CommonModule对象,参数是当前对象,而且赋值CommonModule对象给 DaggerCommonComponent$Builder对象的成员
③:检查 CommonModule对象,而且返回一个 DaggerCommonComponent对象。且该对象建立了一个Prodiver对象。且赋值为 新增类 CommonModule_ProvideIcommonViewFactory 继承于Factory(Factory extends Provider),且包含成员CommonModule
④:调用DaggerCommonComponent对象的inject并传入当前对象,建立一个 LoginPresenter 对象,而且赋值给this对象的presenter对象(该对象标记过Inject)
// dagger2 implementation 'com.google.dagger:dagger:2.23.1' annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'