Dagger,ButterKnife,Roboguide,AndroidAnnotations框架的依赖注入浅析

Dagger,ButterKnife,Roboguide,AndroidAnnotations框架的依赖注入浅析

  • Dagger ---专业为Android打造的依赖注入(DI)框架
    • 简述:
      • 框架的使用方式和Google Guice差不多,其实Dagger是Guice的一个子集,更轻量,更适合在Android平台使用
    • 参考资料:
      • Dagger: 一种Android平台的依赖注入框架
        从资料可以看出-->Dagger已支持以下功能:
        • 使用 JSR-330标准注解进行构造器注入
        • 使用@Provides注解创建对象
        • 针对依赖树的中心上下文
        • 昂贵资源延迟注入
        • 同一接口的多种实现
        • 静态注入 (针对遗留环境)
        • 绑定的编译时验证
    • 缺点:
      • Dagger仅支持构造器的注入,而你无法进行方法注入
      • Dagger仅支持@Singleton注解而没有其他范围了
    • 优点:
      • 注解的编译时检查,对于不完整的绑定会触发编译错误
    • 原理:
      • 是Guide的子集,与其的模式一样
      • Dagger的原理分析
    • 使用及讲解:
    • Dependency injection on Android: Dagger (Part 1)
    • Dagger——java和Android的高速依赖注入工具
    • Dagger:Android上的依赖注入框架
  • ButterKnife---一个安卓视图注入框架
    • 参考资料:Dependency Injection: RoboGuice vs. ButterKnife。(果然,直接看英文的来得快点,这方面的中文解释还是很少,国外还是很给力。)其中:
        In android, if I want to avoid the boilerplate code such as injection of views, view holder in adapter and click listeners then the preferred library can be ButterKnife compare to others because remaining all done more than the required. 
      
      发现:ButterKnife对view,view holder in adapter and click listeners处理比较好。接着下一段话:
        AndroidAnnotations and ButterKnife does the similar work. RoboGuice, Dagger and Transfuse are in the same category.
        `AndroidAnnotations and ButterKnife`使用的是相同的工作,与`Dagger,Transfuse`不同
      
      发现,只在功能上讲解各自的特性和区别,却没有在原理上进行更多的分析,很遗憾。
    • 功能特性(方便了程序员,提高开发效率):
      • 支持 Activity 中的 View 注入
      • 支持 View 中的 View 注入
      • 支持 View 事件回调函数注入
      • 从繁琐的 findViewById 中解救出来
      • Fragment 销毁的时候掉用 ButterKnife . reset ( this );
    • 使用详解:
      • Butter Knife:一个安卓视图注入框架
      • butterknife的使用
      • ButterKnife Android程序员的一大利器,原文:http://jakewharton.github.io/butterknife/
      • View 注入框架 Butter Knife 4.0 发布
    • 总结:很遗憾,并没有找到Butter Knife的原理-->在app的性能上的消耗?
  • Roboguide
    • 原理:
      • RoboGuice 为Android平台上基于Google Guice开发的一个库
    • 特点:
      • 方便findViewById在XML中查找一个View,并将其强制转换到所需类型
      • check for null when you getIntent().getExtras()
      • Less code means fewer opportunities for bugs
    • 使用及讲解:
      • 使用Roboguice依赖注入规划Android项目
      • Roboguice教程博客专栏
    • 参考资料:
      • Android RoboGuice 使用指南(1):概述
      • github地址:roboguice
  • AndroidAnnotations---最火的快速开发框架
    参考资料:
    注解框架---AndroidAnnotations这里强调了几点:
    • AndroidAnnotations简称为AA,大量的使用注解,不会对APP的造成不良影响,会影响到APP的执行性能。
    • 分析主流注解框架:xUtilsButterKnifeDragger和Roboguice说道:实现原理是一致的,都是通过反射机制实现的,在Runtime运行期反射类中带有注解Field和Method,然后再去执行注解相对应的逻辑代码这样做:在APP的运行期执行的,会造成执行的效率下降执行时间变长的缺点。
      -->这里我就不发表意见,没有用过,不知道,但是查找相关的资料,可不是这么说,有点夸大AA,降低其他框架的嫌疑。
    • 工作的原理:
      • 在编译器中加了一层额外的自动编译步骤,用来生成基于你源码的代码。
      • 使用AA的注解在编译期间就已经自动生成了对应的子类,运行期运行的其实就是这个子类.则不会造成任何负面的影响
    • 使用详解参照:
      • Android 最火的快速开发框架AndroidAnnotations使用详解
      • Android开发框架androidannotations使用初步
      • 体验AndroidAnnotations
    • 总结:从资料的分析来看,AndroidAnnotations像是综合了其他的几个框架的优点,通过注解,减少了繁琐(R.id.btn)的使用,并在编译的时候,将相应的注解进行转换。即:加快了开发的速度,又不影响app的性能。
  • 综合考虑:
    • Android依赖注入:Dagger、RoboGuice和ButterKnife 这里有三者的比较,但是仅仅是译文,没有一个很好的解释到位。
    • 相反:高手速成android开源项目[tool篇] 这里有很好的解释
      • AndroidAnnotations特点:
        (1) 依赖注入:包括view,extras,系统服务,资源等等
        (2) 简单的线程模型,通过annotation表示方法运行在ui线程还是后台线程
        (3) 事件绑定:通过annotation表示view的响应事件,不用在写内部类
        (4) REST客户端:定义客户端接口,自动生成REST请求的实现
        (5) 没有你想象的复杂:AndroidAnnotations只是在在编译时生成相应子类
        (6) 不影响应用性能:仅50kb,在编译时完成,不会对运行时有性能影响。
      • PS:AndroidAnnotationsroboguice的比较:roboguice通过运行时读取annotations进行反射,所以可能影响应用性能,而AndroidAnnotations编译时生成子类,所以对性能没有影响
      • roboguice 帮你处理了很多代码异常,利用annotation使得更少的代码完成项目
      • butterknife 利用annotation帮你快速完成View的初始化,减少代码
      • Dagger 依赖注入,适用于Android和Java
  • 相关阅读:
    • 依赖注入和注解,为什么 Java 比你想象的要好
    • 依赖注入
    • 依赖注入的概念

你可能感兴趣的:(Dagger,butterknife,Roboguide)