寒玉 Blog
  • Home
  • Books
  • About Me
  • Categories
  • Tags
  • Archives

Google Gunice


  • Google Guice
    • Guice概述
    • Guice特点
    • 最佳实践
    • Guice文档
    • Guice vs Spring
  • 参考资料

Google Guice

Guice是google开源的一个依赖注入类库,相比Spring Ioc来说更小更快,Elasticsearch,Druid大量使用了Guice.

Guice概述

  • Guice是google开源的依赖注入类库,通过Guice减少了对工厂方法和new的使用,使得代码更容易交付,测试和重用
  • Guice可以帮助我们更好地设计API,它是一个轻量级的非侵入式的类库
  • 对开发友好,当异常发生的时候能提供更多有用的信息用于分析

Guice特点

  • 注入定义简单
  • 支持多种注入方式
  • 可扩展
  • 效率高
  • 自定义注解

最佳实践

  • 最小化可变性

尽可能注入的是不可变对象

  • 只注入直接依赖

不用注入一个实例来获取真正需要的实例,增加复杂性且不易测试

  • 避免循环依赖
  • 避免静态状态
  • 采用@Nullable
  • 模块的处理必须要快并且无副作用
  • 在Providers绑定中当心IO问题
  • 不用在模块中处理分支模块
  • 尽可能不要暴露构造器

Guice文档

  • 用户指南
  • 最新版API
  • Bob Lee视频教程

Guice vs Spring

Spring Guice
使用xml 使用将类与类之间的关系隔离到xml中,由容器负责注入被调用的对象,因此叫做依赖注入 不使用xml,将类与类之间的关系隔离到Module中,声名何处需要注入,由容器根据Module里的描述,注入被调用的对象
使用Annotation 使用支持自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,就可以达到同一个类里边的同一个接口的引用,注射给不同的实现,在Module里用标注做区分,灵活性大大增加
运行效率 装载spring配置文件时,需解析xml,效率低,getBean效率也不高,不过使用环境不会涉及到getBean,只有生产环境的时候会用到getBean,在装载spring应用程序的时候,已经完成全部的注射,所以这个低效率的问题不是问题 使用Annotation,cglib, 效率高与spring最明显的一个区别,spring是在装载spring配置文件的时候把该注入的地方都注入完,而Guice呢,则是在使用的时候去注射,运行效率和灵活性高。
类耦合度 耦合度低,强调类非侵入,以外部化的方式处理依赖关系,类里边是很干净的,在配置文件里做文章,对类的依赖性极低。 耦合度低,强调类非侵入,以外部化的方式处理依赖关系,类里边是很干净的,在配置文件里做文章,对类的依赖性极低。
类编写时 需要编写xml,配置Bean,配置注入 只需声明为@inject,等着被注入,最后在统一的Module里声明注入方式
仅支持IOC 否,spring目前已经涉猎很多部分 是,目前仅仅是个DI容器
是否易于代码重构 统一的xml配置入口,更改容易 配置工作是在Module里进行,和spring异曲同功
配置复杂度 在xml中定位类与类之间的关系,难度低 代码级定位类与类之间的关系,难度稍高

参考资料

  • http://tech.it168.com/zt/guice/
  • http://ginobefunny.com/post/learning_guice/
  • http://hao.jobbole.com/guice/
  • https://github.com/greengerong/guice-demo
  • http://blog.itpub.net/13270562/viewspace-217874/

  • « HBase线上问题处理记录
  • GIT »

Published

6 27, 2017

Category

misc

Tags

  • gunice 1
  • Powered by Pelican. Theme: Elegant by Talha Mansoor