依赖注入?Dagger?
2016-06-06 21:12
246 查看
有一个Dagger框架好像特别火,在好多地方都可以见到它的身影,这不禁让我**一紧,难道这又是什么牛逼的技术吗?赶紧上网查查,这玩意是干什么用的,一查不要紧,
只是顿时感觉有点懵逼,依赖注入???,”依赖注入“这几个字好像在那听到过,但是,这到底是啥玩意?有啥用?为啥会出现个这东西呢?
如果各位看了上面的一段话,感觉和博主产生了共鸣,那我要告诉你,这篇文章适合你!
我们怎么能在不测试
看出什么不同了吗?我们把一个模块通过构造方法传给了另一个模块。有什么差别吗?差别大了去了,第一种方式我们直接在模块中new 对象,此对象是不可更改的,就是我们定义的类的对象,但是第二种方式是可以通过多态的原理来传入我们定义的子类的,通过这种方式实现两者之间的解耦。
参考资料:http://antonioleiva.com/dependency-injection-android-dagger-part-1/
只是顿时感觉有点懵逼,依赖注入???,”依赖注入“这几个字好像在那听到过,但是,这到底是啥玩意?有啥用?为啥会出现个这东西呢?
如果各位看了上面的一段话,感觉和博主产生了共鸣,那我要告诉你,这篇文章适合你!
什么是依赖?
如果我们想注入依赖,我们首先要知道依赖是什么,简单来说,依赖就是两个代码模块之间的连接,在面向对象语言中可以说是两个类, 通常一个类要利用另一个类来做一些事情。依赖是有隐患的,为什么?
依赖存在隐患,因为我们把两个模块绑定在了一起,这样,如果我们需要改变其中的一个模块,我们必须对这个模块进行调整,对于测试来说这种设计方式是非常糟糕的,因为当我们做单元测试的时候,测试一个模块,要把其他的模块分离出去,看以下代码:public class Module1{ private Module2 module2; public Module1(){ module2 = new Module2(); } public void doSomething(){ ... module2.doSomethingElse(); ... } }
我们怎么能在不测试
doSomethingElse方法的情况下对
doSomething进行测试?如果测试失败,究竟是
doSomethingElse出错,还是
doSomething出错?这非常难辨别。特别是在
doSomethingElse方法在数据库中存储了数据,或者执行了其他的API方法,对于测试就更复杂了。
怎么解决依赖存在的隐患?依赖反转
通过前一段我么知道,在一个模块的内部去实例化另一个模块会存在隐患,因此我们需要用另一种方法来实现依赖,什么方法?通过构造方法,改造先前的代码:public class Module1{ private Module2 module2; public Module1(Module2 module2){ this.module2 = module2 } public void doSomething(){ ... module2.doSomethingElse(); ... } }
看出什么不同了吗?我们把一个模块通过构造方法传给了另一个模块。有什么差别吗?差别大了去了,第一种方式我们直接在模块中new 对象,此对象是不可更改的,就是我们定义的类的对象,但是第二种方式是可以通过多态的原理来传入我们定义的子类的,通过这种方式实现两者之间的解耦。
那什么是依赖注入呢?
通过上面已经了解了,一个模块被另一个模块依赖的时候,通过构造方法来传递对象是一个比较好的方法,但是这有一个问题,我们不在模块的内部创建对象,就必须找一个地方创建对象,还有就是如果依赖多个模块,那么构造函数会变得非常臃肿,而依赖注入要解决的就是此问题。什么是Dagger?
Dagger是为低端设备设计的依赖注入框架,大多数的依赖注入依靠反射的机制来创建和注入对象,确实,反射很强大,但是它会影响效率,特别是在低端的设备上,就更明显了,而Dagger使用了预编译的方式来创建它需要的类,不需要反射,虽然Dagger可能没有其他的依赖注入那么强大,但是它的效率非常高。Dagger仅仅用于测试吗?
这不是搞笑吗?如果真是这样,我干嘛还要写此博客,其实,它的强大之处在于,它可以让我们在不同的app中重用我们的模块,或者在同一个app中,想象一下,有这样一种场景,一个app在测试的时候从本地文件获取数据,但是在发布的时候从服务器获取数据,此时就可以利用依赖注入来实现。最后
如果以前没有接触过依赖注入,理解这个概念确实不是很简单,但是依赖注入对于开发还是非常有用的,希望各位多多理解吧!参考资料:http://antonioleiva.com/dependency-injection-android-dagger-part-1/
相关文章推荐
- 防御SQL注入攻击时需要注意的一个问题
- Sql2005注入辅助脚本[修改版]
- MySQL注入中导出字段内容的研究通过注入导出WebShell
- 浅析MySQL的注入安全问题
- NopCommerce架构分析(一)Autofac依赖注入类生成容器
- sql server注入建立虚拟目录的方法
- PHP中怎样防止SQL注入分析
- C#使用带like的sql语句时防sql注入的方法
- JavaScript中的依赖注入详解
- mssql注入躲避IDS的方法
- 浅析依赖注入框架Autofac的使用
- 浅析Node.js中使用依赖注入的相关问题及解决方法
- Spring中属性注入详解
- ASP注入详细命令40条第1/2页
- Cookie 注入是怎样产生的
- 高级php注入方法集锦第1/2页
- Android中三种注入事件方法比较
- sql注入与转义的php函数代码
- 理解php依赖注入和控制反转
- 如何用js 实现依赖注入的思想,后端框架思想搬到前端来