Dagger2

 持续更新中、、、

第二次更新:   2018-3-22 10:50

在Activity中通过获取Activity的容器来注入Activity,达到Activity和容器相连

这里面ActivityComponent依赖AppComponent,那么只需要在AppComponent配置各种东西就行了 

大体上只需要提供这五个就行了,这里的AppModule和HttpModule都是为了这五个东西而准备的

可以看到,AppModule需要RetrofitHelper, RealmHelper, ImplPreferencesHelper这几个,其他的都好说,不需要依赖其他类,但是RetrofitHelper需要

需要ZhihuApis, GankApis等,这一系列需要Okhttp+Retrofit配合才能生成,所以回到AppComponent,还有一个HttpModule,感觉Module之间可以相互引用,应该是容器自己获取到了所有资源,自动去处理这些事情的,不清楚算法怎么写的,非常棒棒的, 然后的话就是Spring和Structs2里面可以通过接口来注入,这里貌似在AppModule通过一个方法来返回的,不能通过识别子类注入父类的做法。 

在这里,使用Scope + Qualifier 限定使用范围,构建Okhttp和Retrofit, okhttp设置超时,缓存,dns,代理  and so on  
 
大体上,网络的核心架构已经完了。

第一次更新:  2018-03-20 14:36 

呃,看了俩天的时间,懵懵懂懂,大致了解了这个东西的用处,依赖注解在以前玩Spring+Mybatis+Structs2的时候也了解过,ButterKnife也有过一些宏观上的理解,这个东西目前没有去了解源码,先大致有个了解,总的来说,使用Component充当容器,里面放类的实例,如果是第三方的类,用Module收集起来,统一处理,自己编写的可以用Inject来处理,至于Scope,Qualifier,Singleton,SubComponent只是对Dagger2的补充。   优点是结构清晰,日后改起来舒服,不需要new,测试方便,大工程用起来效果明显。

Inject Component Module Provides  
Inject是注入点  
Component是容器  用来初始化所有需要注入的东西
Module是特殊的容器  放那些第三方库类 不能注入的  配合Provides一起使用
作为补充的Scope, Qualifier, Singleton, SubComponent等都是对dagger2的补充 
 
创建类有俩个维度,第一个是Inject,第二个是Module,优先使用Module里面的
如果在Component有俩个Inject都是A,那么会出现依赖注入迷失,这时候需要用到Qualifier 限定符
 
Component以页面为粒度进行划分,需要一个全局ApplicationComponent,每个页面对应一个Component
 
Singleton用来管理Component和Module的关系,保证是匹配的,可读性,Module创建的类是单例
 
类实例共享 组织Component,其他的Component想把全局的类实例注入到目标类怎么弄?  
依赖方式: 一个Component是依赖一个或多个Component,dependencies属性就是依赖方式的实现
包含方式: 一个Component是包含一个或多个Component,SubComponent是具体的实现
 
Scope  用来组织Component,编译期间会报错, 若Component的自定义Scope和Modules中的标注创建类实例方法的注解不一致,会报错

优点: 不需要new, 单例线程安全,不论懒汉模式还是饿汉模式, app的全局Component管理各个页面的Component,结构非常清晰,方便测试。

项目学习地址: https://github.com/codeestX/GeekNews

扩展阅读: http://android.jobbole.com/82694/

后续思考:  dagger固然是好,但是忘记了google目前把kotlin作为开发标准,那么问题来了,是kotlin还是java,既然有React Native的趋势,那么Kotlin也不可避免的失败,可以接着学。  kotlin放弃。


待持续更新:  2018-3-20 14:35:51

原文地址:https://www.cnblogs.com/zeroones/p/8609150.html