泛型介绍
- @Component 指定一个或多个Module class ; 负责指向需要被注入的变量
- @Module 实力化对象的管理类,使用Component时需要指定一个或多个
- @Provides 实例化对象
- @Inject 需要被注入的变量
inject声明被依赖注入的变量,Module中实例化对象,Component中进行变量和实例化对象的绑定
最后是init调用
mark Build后,会通过apt对应生成DaggerMainComponent、MainActivity_MembersInjector、MainModel_ProviderPresenterFactory
这三个类DaggerMainComponent中核心就是将变量所在类对象传入,Module的创建
-
这张图中的mainModel是在DaggerMainComponent.builder().build().inject(this);这句中的build函数时进行创建的
-
这里会创建MainModel
- MainActivity_MembersInjector这个类核心就是进行赋值
-
这里是调用了Module中自己写的@Provides注解
@Module 相当于实例化的管理类,负责都创建哪些类型的实例化
@Provides 是某个类型的具体实例化
@Inject 需要被注入的变量
-
@Component
- 指定一个或多个Module class ;
- 负责指向需要被注入的变量(实际是MainActivity_MembersInjector类中进行赋值)
DaggerMainComponent 是有@Component apt出来的实现类
MainModel_ProviderPresenterFactory 工厂,用来创建Module中的所有@Provides
AndroidProcessor
https://github.com/google/dagger/blob/master/java/dagger/android/processor/AndroidProcessor.java