Dagger: 一种Android平台的依赖注入框架

标签: dagger android 平台 | 发表时间:2012-10-31 16:43 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

Square是一家专注于移动支付的公司,最近它 推出了一种叫做 Dagger的新库,并将其描述为“一种针对Android和Java的快速依赖注入器”,该库的源码已经发布在 GitHub上。

依赖注入(也叫做 控制反转)已在一些流行的框架中(如 SpringGoogle Guice)占有重要的位置。然而这些框架仅仅是针对标准JVM而设计的,并不支持诸如Android之类的移动环境。当RoboGuice正尝试提升Guice在Android的体验之时,Dagger通过专注于一种简化的功能集以一种不同的方式达到了更好的性能。

在本文写作时,Dagger已支持以下功能:

  • 使用 JSR-330标准注解进行构造器注入
  • 使用@Provides注解创建对象
  • 针对依赖树的中心上下文
  • 昂贵资源延迟注入
  • 同一接口的多种实现
  • 静态注入 (针对遗留环境)
  • 绑定的编译时验证

相对Spring和Guice来说,Dagger针对标准 注入注解只有最基本级别的支持。在Dagger中仅支持构造器的注入,而你无法进行方法注入(向类中进行依赖注入的另一种方式)。Dagger同样提供了@Provides注解,其工作方式类似于Guice。

一旦定义了依赖,你可以通过保存着整棵Dagger初始化对象树的ObjectGraph (对象图谱)来获取那些已被解析的类。它的工作原理类似于Spring的 ApplicationContext 和Guice的 Injector 。Dagger同样也沿用了在Guice中的模块概念(一系列绑定)。

如果以一种迫切的方式创建一些像连接池那样的依赖,会付出相当昂贵的代价。在这种情况下,Dagger支持对这些依赖延迟初始化,而语法也与Guice相似。还有一种情况是对于同一接口会有多种实现并存,Dagger允许你使用@Named注解进行区分。

最后Dagger可以继续使用Factories来取代依赖注入以提供遗留代码的注入。同样的,这种功能的方式与语法与Google Guice相似。

就目前来看,Dagger支持的功能仅是Google Guice的子集。考虑到这两个框架的负责人员存在重叠,所以这是可以理解的。然而,Dagger拥有更小型的配置,并且非常明确是针对Android开发的,而它最明显的不足是缺少对于方法和字段的注入支持。

Dagger牺牲了这项功能却提升了错误检查及探测方面的能力。通常依赖注入错误要等到应用开始运行期间才能得到运行时报告。Dagger却包含了注解的编译时检查,对于不完整的绑定会触发编译错误。这个功能将使得在Android上的应用开发变得更加轻松。

另一项较大的不同之处是,相比于其他流行的框架,Dagger对范围只有的较少的支持。Dagger仅支持@Singleton注解而没有其他范围了。同样这也是可以预料的,因为Android开发的需求有别于标准的Web开发(Web开发伴随着请求和会话的范围)。

值得一提的是Spring用户不仅注意到了Dagger,同时作为Spring相比于Dagger的不足之处,创建了两个关于Spring的问题报告.第一个是 Spring仅能注入本身含有注解的类,而第二个是 Spring无法区分通过泛型实现同一接口的类

目前Dagger唯一的有效文档是 README,其代码基于Apache2许可开源。注意到该项目尚未有正式的发布版(甚至没有一个源代码的标签),所以当你在评估是否将Dagger用于生产部署时也许需要慎重考虑。

英文原文链接Dagger: A Dependency Injection Framework For Android


感谢 侯伯薇对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至 [email protected]。也欢迎大家通过新浪微博( @InfoQ)或者腾讯微博( @InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

相关厂商内容

创业者之翼为创业新星免费提供甲级办公场所,详情请点击

相关赞助商

全球软件案例研究峰会:来自技术领域最值得借鉴的100个设计案例, 详情请点击!

您可能也会喜欢

相关 [dagger android 平台] 推荐:

Dagger: 一种Android平台的依赖注入框架

- - InfoQ cn
Square是一家专注于移动支付的公司,最近它 推出了一种叫做 Dagger的新库,并将其描述为“一种针对Android和Java的快速依赖注入器”,该库的源码已经发布在 GitHub上. 依赖注入(也叫做 控制反转)已在一些流行的框架中(如. Google Guice)占有重要的位置.

Android平台遗弃史

- fyits0 - Solidot
Google上周宣布了Android 4.0 Ice Cream Sandwich和Galaxy Nexus. 对第一代Nexus One用户来说,坏消息是他们的手机不能升级到ICS. 然而相比其它Android用户,他们则要幸运得多. Michael Degusta制作了一幅示意图,显示大部分Android手机运行的系统都较陈旧,远落后于最新版本,而且一到二年之后就不再有官方更新了.

Android 4.0平台交互简析

- Shark - 互联网的那点事
Android4.0继承了3.0的设计多任务、丰富的通知、可定制的主界面、可调整大小的控件、用于交互和分享的互动性元素. 应用程序的结构日趋成熟,几乎没有发生变化,看看系统主要界面是如何体现其设计目标:简洁、美观和更为智能. 从解锁界面可以看出,4.0使用视觉化元素引导用户进行简单直观的手势操作,精致的动画和反馈增加了系统的互动参与感和趣味性,全新的字体提高了高分辨率界面的可读性,显得更为优雅和现代.

DroidVPN-Android平台的VPN应用软件

- - 无名小卒
       DroidVPN是一款在Android平台的VPN应用,可以解除封锁地区的互联网限制和匿名浏览网页,用户可以实现在手机和平板电脑上玩穿越,使用DroidVPN高级服务可能需要付费. 需要注意的是这个程序的apk文件只运行在有root的安卓设备上. 1、给你无限制的速度,但是有流量限制.

Mifare Classic Tool (MCT),Android平台RFID工具

- - FreebuF.COM
最近逛国外坛子的时候发现一新RFID神器,把介绍翻一下. Mifare Classic Tool (MCT) - 一款用来读取/编辑/分析Mifare Classic卡片的安卓软件. 大家好, 这几个月我开发了一款安卓NFC工具, 希望大家用的高兴, 同时希望大家能在github 上一同完善这款工具.

android平台消息推送机制

- - ITeye博客
方案1、使用GCM服务(Google Cloud Messaging). 简介:Google推出的云消息服务,即第二代的G2DM. 优点:Google提供的服务、原生、简单,无需实现和部署服务端. 缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google.

Android平台漏洞挖掘与利用

- - 外刊IT评论
由于Android平台特殊的生态,每一个Android设备中存在着Google、手机开发商、芯片厂商等多种来源的软件. 每个软件模块没有统一的安全审计制度和测试流程,导致质量良莠不齐,对于安全研究者乃至于恶意攻击者来说,一直是一个比较好的目标. 从安全的角度考虑, Android平台利用Linux的uid特性把权限做了很好的区隔,使得在App层级,权限比较受限,一方面阻隔了许多恶意软件可能造成的破坏,另一方面也限缩了用户能够掌控自己设备的能力.

开发者应如何看待iOS平台和Android平台

- Xiujun Ma - 36氪
随着智能手机和应用的发展,通过开发App变成百万富翁的新闻已经屡见不鲜,那么对于还没有加入进来的开发者或创业者,应如何看待iOS平台和Android平台呢. Dan Frommer给出了以下建议:. 1、如果你做免费的手机应用,那么2个平台一起开发. 至少目前应该如此,Android市场太大以致于你不可能忽略掉它,但同时它又没大到你可以作为你唯一的平台,你可能要考虑到支持多个Android应用商店,比如亚马逊的.

研究称Android是最不开放的开源移动平台

- geek2live - Solidot
市场研究公司VisionMobile受欧盟资助,根据开放式管理、包容性、透明度和源代码易于访问等量化和评估八大开源项目的开放程度. 研究报告(需要输入电邮)称,Google的Android是最不开放的开源移动平台. 八个项目从低到高的排名是Android(23%)、Qt(58%)、Symbian(58%,基于闭源前的管理模式)、MeeGo(61%)、Mozilla(65%)、WebKit(68%)、Linux(71%)和Eclipse(84%).

Qik 升级:让 Android 和 iOS 跨平台视频聊天

- zeng - 爱范儿 · Beats of Bits
Qik 原本是一个视频分享服务,最大的特点是可以一边拍摄一边上传,玩现场直播. 后来这个团队被 Skype 收购,想把它做成一个跟 Skype 略微不同的聊天服务. 今天,基于 Android 版本的 Qik 终于升级到新版,获得了跟 iOS 版本一样的功能. 最低安装要求是 Android 2.1 ,它能利用手机的摄像头(前置后置皆可),实时拍摄和分享,或者进行跨平台视频聊天.