内容主题:Dagger+MVP的基本使用
内容介绍:本Demo主要讲解了Dagger注入框架的基本知识,以及在MVP框架中的使用。
内容主题:Dagger+MVP的基本使用
当前版本:2.0
内容介绍:本Demo主要讲解了Dagger注入框架的基本知识,以及在MVP框架中的使用
官网:http://google.github.io/dagger/
说明:下列Dagger2的主要内容翻译自官网最新的开发文档,
google的这个官方文档十分恶心,demo也很晦涩,所以部分内容来自博客,底部有链接,但是保证demo运行成功;
版权声明:本文为原创文章,未经允许不得转载
博客地址:http://blog.csdn.net/kevindgk
GitHub地址:https://github.com/KevinDGK/DaggerMVPDemo
Dagger是一个Java和Android都可以使用的完全静态的、编译时运行的依赖注入框架。早期由 Square开发,现在是由google维护的一个新的版本。
Dagger2是一种依赖注入的框架,能够在编译时自动生成出一些代码,这些代码可以帮助对应的实例初始化,例如:一个容器类中装的是苹果,正常的写法是:
Public class Container{
Fruit f = new Apple(color,size);
...
}
但是该类面临一个问题,Container类中依赖了Apple的实现,耦合性较高,如果某一天需要修改Apple为Banana,那么你一定得改Container的代码。
如果使用Dagger就会变成:
Public class Container{
@Inject
Fruit f; // 通过使用注解的方式,使用Dagger实现了Fruit类的自动注入
...
}
这样,Container的成员变量就自动初始化成Apple实例了,Container不用关心具体用哪个Fruit的实现,也不用关心到底用什么颜色多大的苹果。
假如某一天要把苹果替换成香蕉,Container的代码是完全不需要改动的。从某种意义上说,Dagger2就是一个帮你写工厂代码的工具。
当然Dagger2的功能比工厂模式更加强大。
依赖注入框架已经存在了好几年了,而且有了大量的配置和注入的API。
Dagger2是第一个implement the full stack with generated code.
Dagger2要实现一个完整的依赖注入,必不可少的元素有三种,Module,Component,Container。
依赖(组件) 注入器(构成) 容器
module的build.gradle添加
apply plugin: ‘com.neenbedankt.android-apt’ // 添加apt插件
compile ‘com.google.dagger:dagger:2.4’ // dagger
apt ‘com.google.dagger:dagger-compiler:2.4’ // dagger编译器
//provided ‘javax.annotation:jsr250-api:1.0’ // Javax标注
provided ‘org.glassfish:javax.annotation:10.0-b28’ // Javax标注,添加android缺失的部分注解
(等待更新)
如果注入的变量爆空指针,点击进入生成的Dagger*******类中发现提供module的方法过时了,显示在项目中没有被使用。
可能的原因:在Component中的注入点,即inject()的参数错误。如果是在MainActivity中注入的,那么此处不要使用inject(Activity activity),
必须使用inject(MainActivity acitvity),否则的话,就会爆出空指针,因为如果写activity,Dagger会去Activity里面去找,然而并没有@Inject,所以会null,详细解释看代码。
Dagger*******经常不出现。
如果写完Component和module,可以使用Build->Make Project;
如果已经生成了,那么就Rebuild Propject即可。
官方网站:https://google.github.io/dagger/
博客:
http://blog.csdn.net/duo2005duo/article/details/50618171
http://blog.csdn.net/duo2005duo/article/details/50696166
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0519/2892.html
Google维护的当前版本:Dagger2
如果文章或者Demo中有问题,请一定留言或者联系我:QQ-815852777