前言

网上都说Dagger2是比较难上手的,我在看了大量资料和使用时也遇到了很多不懂或者模糊的知识点,而且大部分博客资料都比较古老。突然有那么一瞬间,突然明白了所以然,故总结了4篇文章。话说在java中使用还是很繁琐的,不要怕带你真正上手,并运用到我们的Android项目中去。

本次Dagger2讲解总共分4篇:
1、Dagger2基础知识及在Java中使用(1)
2、Dagger2基础知识及在Java中使用(2)
3、Dagger2进阶知识及在Android中使用
4、Dagger2华丽使用在MVP框架中

通过上一篇Dagger2在Android中的使用,我相信代码已经够简洁。而且使用比较灵活了。这篇我们将介绍,怎么在MVP项目里用。会将之前Presenter以依赖注解的方式到Activity里。而且会举个小栗子。请注意这里我会以我之前讲的那篇MVP Demo的角度讲解。不了解的可以通过以下链接去看。绝对受益匪浅!

特别提醒:我这里是以我之前的那篇MVP讲解,刚好那篇只涉及到了RxJava + Retrofit + MVP。这次我们加上Dagger2;

没有了解的先去看这篇文章 RxJava + Retrofit + MVP(看完还不明白,吐槽我。适合初学者,VIP版MVP框架!!)

我会以之前那篇MVP的角度去讲。

首先添加上Dagger2依赖

    //引入dagger.android库implementation 'com.google.dagger:dagger-android:2.24'// if you use the support librariesimplementation 'com.google.dagger:dagger-android-support:2.24'annotationProcessor 'com.google.dagger:dagger-compiler:2.24'annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'

然后在MVP项目里新建daggerforandroid包,加上我们的AppComponent 以及注册的Module: NeedInjectModules。这里我们只把POSTFragment改成使用Dagger2的Fragment

NeedInjectModules如下,我这里不再叙述这些标注的作用。上一篇都说的很清楚了

@Module
public abstract class NeedInjectModules {@ContributesAndroidInjectorabstract POSTFragment injectPOSTFragment();
}

AppComponent如下

@Component(modules = {AndroidSupportInjectionModule.class,NeedInjectModules.class,
})public interface AppComponent extends AndroidInjector<MyApplication> {@Component.Builderinterface Builder {@BindsInstanceBuilder application(Application application);AppComponent build();}}

写到这里,我们需要初始化的数据是Presenter。,因为我是无参,所以直接用@Inject。如果你需要带参数,请注意使用Module。做完这部后,请记得Make Project.

public class PostPresenter extends BasePresenter<PostContract.View> implements PostContract.Prensenter {@Injectpublic PostPresenter(){}...//省略部分代码,便于理解
}

修改我们的Application如下,继承DaggerApplication,把DaggerAppComponent.Builder返回出去

public class MyApplication extends DaggerApplication {@Overridepublic void onCreate() {super.onCreate();}@Overrideprotected AndroidInjector<? extends DaggerApplication> applicationInjector() {return DaggerAppComponent.builder().application(this).build();}}

重点来了

之前我们使用RxJava + Retrofit + MVP的Demo,为了解决RxJava的内存泄漏, 使用了RxActivity,和RxFragment。

通过上一篇Dagger2在Android中使用,是需要继承DaggerActivity 和 DaggerFragment的。

这个时候怎么办呢。我们来看我们点开DaggerActivity的源码;


看完是不是有感觉了,我们新建一个BaseDaggerActivity 代码和之前的BaseActivity一模一样。唯一不同的是实现implements HasAndroidInjector 接口,并按源码里的去配置参数。

同时注意要给mPresenter加上@Inject标注,然后把我们之前页面new的方法cretaePresenter删除。搞定了

public abstract class BaseDaggerActivity<T extends BasePresenter> extends RxFragmentActivity implements BaseView, HasAndroidInjector {@Injectpublic T mPresenter;//public abstract T cretaePresenter();...//省略部分代码,便于理解
}

做完以上就搞定了,BaseDaggerFragment也是一样,如果需要注解的只要继承BaseDaggerActivity,不需要注解的话只要继承BaseActivity,即可

以上就是用Dagger2 依赖注入Presenter。

这里有个小例子,让你对Dagger2爱不释手

以上操作清楚后,我在Demo里的POSTFragment,用了依赖注入,代码如下:

public class POSTFragment extends BaseDaggerFragment<PostPresenter> implements PostContract.View {@InjectWoman woman;@OnClick(R.id.btn_dagger)public void daggerClick() {ToastUtils.showToast(woman.getSoul().getMoney() + "");}}

toast结果是 :100;

我们看看Woman的代码,注入了Soul

public class Woman {@InjectSoul soul;@Injectpublic Woman() {}public Soul getSoul() {return soul;}public void setSoul(Soul soul) {this.soul = soul;}
}

我们看看Soul的代码,当然你可以用Module传值。

public class Soul {private int money = 100;@Injectpublic Soul() {}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}
}

这样写完Woman类,和Soul类。不用做别的操作,就能用了。当然如果用Module传值,要在AppComponent写上!!是不是很方便很方便

结束语:至此,我们4篇文章全部结束了。看完,是不是觉得Dagger2在Android中很好用。省去了所有new的过程,如果你再100个页面都使用了new 某个类。但是突然高需求,改了构造方法什么的,或者其他一些方法,是不是只要在Module里修改下就行了? 完美解耦

本文github Demo地址

花了老大劲,别误会,不是要钱。能不能留下个足迹star啊

google四件套之Dagger2。从入门到爱不释手,之:Dagger2华丽使用在MVP框架中相关推荐

  1. python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...

    原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...

  2. Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法

    Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据,总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以初始的URL初始化Request,并设 ...

  3. google四件套之Dagger2

    前言 网上都说Dagger2是比较难上手的,我在看了大量资料和使用时也遇到了很多不懂或者模糊的知识点,而且大部分博客资料都比较古老.突然有那么一瞬间,突然明白了所以然,故总结了4篇文章.话说在java ...

  4. Spring Cloud入门系列(1)- Spring生态体系发展史+全系框架介绍

    Spring发展史 2000年,Java EE和EJB迅速发展,很多知名公司都是采用此技术方案进行项目开发,但是EJB 属于重量级框架,开发繁琐.于是一个叫Rod Johnson的大佬写了一本叫做&l ...

  5. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支 ...

  6. ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

    原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 ...

  7. 【Vue 快速入门】从零开始搭建 VUE + Element UI后台管理系统框架

    [Vue 快速入门]从零开始搭建 VUE + Element UI后台管理系统框架 前言 后台管理系统前端框架,现在很流行的形式都是,上方和左侧都是导航菜单,中间是具体的内容.比如阿里云.七牛云.头条 ...

  8. laravel mysql 视图_视图入门:Laravel 支持的视图格式以及在路由中的基本使用

    视图入门:Laravel 支持的视图格式以及在路由中的基本使用 由 学院君 创建于2年前, 最后更新于 1年前 版本号 #2 19892 views 20 likes 0 collects Larav ...

  9. jsx 调用php,JavaScript_JavaScript的React框架中的JSX语法学习入门教程,什么是JSX? 在用React写组件的 - phpStudy...

    JavaScript的React框架中的JSX语法学习入门教程 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代码里直接写起了XML标签,实质上 ...

  10. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. 回文数:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
  2. C++_动态绑定,再谈const,new,delete
  3. 皮一皮:下班的渴望...
  4. Extjs学习笔记--(五,事件)
  5. 我们的2008。。。。。。
  6. macos 全局快捷键 打开 iterm_在 macOS 上实用的十大软件!你get了吗?
  7. stackoverflow_Stackoverflow:您尚未发现的7个最佳Java答案
  8. 【渝粤题库】国家开放大学2021春4988电子政务概论题目
  9. PAT乙级 1039 到底买不买
  10. 用CSS画一些多边形状
  11. JAVA springboot ssm b2b2c多用户商城系统源码(三):服务提供与调用
  12. C 语言传递数组给函数的三种形式
  13. 微信小程序API 文档快速参考索引
  14. springcloud-gateway路由配置和跨域配置
  15. 手工画图和计算机画图的内在联系,浅谈计算机绘图有关的论文(2)
  16. 计算机内加减法的溢出处理
  17. psv无线怎么连接电脑连接服务器,如何使用PSV远程操作电脑 PSVITA REMOTE DESKTOP详细教程...
  18. 外贸建站五大必备要领
  19. 共享打印机服务器脱机状态,打印机脱机工作怎么恢复 共享的打印机脱机状态...
  20. 淘宝美工设计就业前景怎么样?有发展前途吗?

热门文章

  1. 融思杯 第三届 部分wp
  2. Photoshop插件--创建暗调通道--脚本开发--PS插件
  3. Adobe Creative Cloud官方卸载工具
  4. C语言 牛顿法 解方程,如何用科学计算器求方程的解(牛顿法解方程具体步骤)...
  5. 开心电视助手v3.8最新绿色版,安卓设备远程管理工具神器
  6. 【雨滴桌面】简洁的桌面天气,可以说是永不失效的天气数据获取方法
  7. 【原创】VBA学习笔记(316)VBA编程基础知识扫盲,只适合纯自学新手看
  8. 计算机相关知识抢答题题库,计算机基础知识抢答赛题库
  9. Mac下使用SmartSVN搭配svn使用
  10. 将CDlinux 0.9.7.1的iso安装到U盘并安装grub2