Android开发中依赖注入的应用
什么是依赖注入?
public class MyClass{private AnotherClass mAnotherObject;public MyClass(){mAnotherObject = new AnotherClass();} }
public class MyClass{private MyInterface mAnotherObject;public MyClass(MyInterface anotherObject){mAnotherObject = anotherObject;} }
依赖注入可以简化代码编写,并提供一个可适配的环境,方便进行单元测试以及功能模块的配置。
开发中可能会遇到这样的麻烦。
public class FriendListFragment{private FriendListAPI mFriendListAPI;......public FriendListFragment(){mFriendListAPI = new FriendListAPI();}private void getFriendList(){mFriendListAPI.getFriendList(new Callback(){public void onSuccess(List<User> list){......}......});} }public class FriendListAPI{private OkHttpClient mHttpClient;public FriendListAPI(){mHttpClient= new OkHttpClient();//接下来各种Http配置 ......} }
代码写好了,运行程序试试。可是,后台API没有准备好或者没有数据怎么办?自己添点测试数据试试吧。在FriendListFragment里面添加一个生成测试数据的方方法buildTestData(),并替换getFriendList()方法。等后台API准备好后再改回来。
public class FriendListFragment{private FriendListAPI mFriendListAPI;......public FriendListFragment(FriendListAPI friendListAPI){mFriendListAPI = friendListAPI;} }public class FriendListAPI{private OkHttpClient mHttpClient;public FriendListAPI(HttpClient okHttpClient){mHttpClient= okHttpClient;......} }
现在引入一个稍微复杂的场景,更多的Fragment需要使用FriendListAPI,我们需要在两个不同的地方进行注入,因此产生了许多重复代码。
Dagger解决方案。
public class MyModule{@Provides @Singleton OkHttpClient provideOkHttpClient(){//这里可进行各种Http配置return new OkHttpClient();}@Provides @Singleton FriendListAPI provideFriendListAPI(){return newFriendListAPI();} }
初始化模块以及依赖对象图。
public class MyApplication extends Application{private ObjectGraph graph;@Override public void onCreate() {super.onCreate();graph = ObjectGraph.create(getModules().toArray());}protected List<Object> getModules() {return Arrays.asList(new MyModule(this));}public void inject(Object object) {graph.inject(object);} }
最后添加注入点并进行注入。
public abstract class BaseActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);((MyApplication) getApplication()).inject(this);} }public class FriendListFragment{@Inject FriendListAPI mFriendListAPI;...... }public class FriendListAPI{@Inject OkHttpClient mHttpClient;...... }
如需进行单元测试,或使用可生成测试数据的模拟API,则再编写一个模块,在初始模块和依赖对象图时替换即可。
现有的依赖注入性能?
什么时候需要依赖注入?
参考资料:
转载于:https://www.cnblogs.com/hellsong/p/4463569.html
Android开发中依赖注入的应用相关推荐
- 在android开发中使用multdex的方法-IT蓝豹为你整理
在android开发中使用multdex的方法-IT蓝豹为你整理 Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个, ...
- dagger android,在Android开发中使用Dagger2的方法
在Android开发中使用Dagger2的方法 发布时间:2020-12-08 17:12:38 来源:亿速云 阅读:236 作者:Leah 在Android开发中使用Dagger2的方法?相信很多没 ...
- Swift中依赖注入的解耦策略
原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
- 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
前言 最近在研究 Kotlin 协程,发现功能真的超级强大,很有用,而且很好学,如果你正在或计划使用 Kotlin 开发 Android,那么 Kotlin 协程你一定不能错过! 协程是什么? 我们平 ...
- android开发模式,Android开发中无处不在的设计模式
Android开发中无处不在的设计模式――单例模式 Android开发中无处不在的设计模式――Builder模式 前面介绍了单例模式和Builder模式,有兴趣的见上面两个链接,这篇文章侧重介绍1下视 ...
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
- Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题
在Android开发中,比较头疼的问题就是EditText总是已启动就获得焦点并弹出输入框,感觉很是不爽.而且,因为输入框的弹出,导致屏幕布局获得改变,有些空间被挤压到一起,很是难看,所以,我就上网搜 ...
- android最佳开发实现_在android开发中使用可访问性最佳做法
android最佳开发实现 As you know, accessibility is about building products that everyone can use easily and ...
最新文章
- 趋势科技实习面试后感
- linux下yum包更新不了
- 自己写getElementsByClass()方法
- OpenCV实现连通域
- java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
- c#物联网_C# 基础知识系列- 16 开发工具篇
- MaxCompute Studio使用心得系列6——一个工具完成整个Python UDF开发
- mongodb常用操作命令(待续)
- 华为帮助摩洛哥成为全球第一个5G全覆盖的国家
- 两次称量误差多少为恒重_双台子100吨二手散装罐回收价格多少
- firefox如何载入json文件_Firefox在书签工具栏中推隐藏“其他书签”文件夹功能
- k8s与日志--journalbeat源码解读
- oracle建表语句6,Oracle建表语句
- 【计算机网络】计算机网络基础知识笔记
- 加权平均数的例子_EXCEL 加权平均数的计算
- python seaborn教程_Seaborn官方教程中文教程(一)
- kubernetes 开发必须要知道的知识点—— API Group
- Y7000P电池0%解决办法
- const violate
- EditPlus设置保存时不生成bak文件
热门文章
- 2017年php还能火多久,PHP还会火吗?
- 税收分类编码2020_增值税开票系统你会吗?2020最新开票(金税盘版)图文教程详细版...
- JavaScript高级之ES5 中的新增方法
- 指令系统——数据存放、指令寻址(详解)
- LeetCode LCP 30. 魔塔游戏(优先队列)
- LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)
- LeetCode 1181. 前后拼接(哈希map)
- LeetCode 第 30 场双周赛(477/2545,前18.7%,第2次全部通过)
- 数据结构--栈--浏览器前进后退应用
- burp爆破线程设置多少_你知道线程池创建多少线程比较合理吗?