阅读更多

27顶
15踩

编程语言

原创新闻 Guice,超轻量依赖注入容器

2008-12-16 11:04 by 资深编辑 ╱/罒呍唲 评论(18) 有8227人浏览

Guice是超轻量级、新一代的,为Java 5及后续版本设计的依赖注入容器。它的特点是速度快、代码少,非常容易进行单元测试,且易于上手。它可以使用标注或者Module接口两种方法来解决IoC问题。在很多方面Guice都要优于Spring。

Guice 2.0测试版
Guice的开发团队正在开发Guice 2.0,他们希望能在2008年底前发布。其中包括一些新的Guice功能和功能的美化。

Guice的特点:

  • 注入的定义简单:只需声明为@inject 。
  • 依赖注入方式发生改变:类与类之间的关系隔离到Module中,由容器根据Module里的描述,注入被调用的对象。
  • 运行效率高:Guice是在使用的时候进行注入,动态注入的运行效率和灵活性高。
  • 支持多种注入方式:属性注入、构造方法注入、setter方法注入。
  • 支持Annotation:使用自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,即可以达到对同一个类里边的同一个接口的引用,注入不同的实现,在Module里用标注作区分,灵活性大大增加。


DI的例子


假如我编写了一个superhero的应用,我定义一个hero为Frog Man,以下是代码:

public class FrogMan {
  private FrogMobile vehicle = new FrogMobile();
  public FrogMan() {}
  // crime fighting logic goes here...
}

public class FrogManTest extends TestCase {
 public void testFrogManFightsCrime() {
    FrogMan hero = new FrogMan();
    hero.fightCrime();
    //make some assertions...
  }
}


我运行了这个代码,会得到以下错误:

java.lang.RuntimeException: Refinery startup failure.
  at HeavyWaterRefinery.<init>(HeavyWaterRefinery.java:6)
  at FrogMobile.<init>(FrogMobile.java:5)
  at FrogMan.<init>(FrogMan.java:8)
  at FrogManTest.testFrogManFightsCrime(FrogManTest.java:10)


出错的原因是这些依赖很难启动而且很难互动。

 


如何解决这个问题呢?

public class FrogMan {
  private Vehicle vehicle;

  public FrogMan(Vehicle vehicle) {
    this.vehicle = vehicle;
  }
  // crime fighting logic goes here...
}

 

这个例子的实质在于DI,你的类通过引用接口来获取他们的依赖关系,而不是通过构建(或静态引用)。下面的这个代码会告诉你DI为何能让你的测试变的容易:

 

static class MockVehicle implements Vehicle {
  boolean didZoom;

  public String zoom() {
    this.didZoom = true;
    return "Mock Vehicle Zoomed.";
  }
}

public void testFrogManFightsCrime() {
  MockVehicle mockVehicle = new MockVehicle();

  FrogMan hero = new FrogMan(mockVehicle);
  hero.fightCrime();

  assertTrue(mockVehicle.didZoom);
  // other assertions
}




查看更多的详情:Dependency injection with Guice



 

来自: ibm
27
15
评论 共 18 条 请登录后发表评论
18 楼 if(i!=我){} 2012-05-15 19:48
我一直没用过ibatis,但当我知道mybatis比ibatis慢不少的时候,我就知道事情远没有这么简单~~~~
17 楼 tedeyang 2008-12-17 11:07
xijinn 写道

我还以为出2.0了呢,贴这文章过来 请保证新闻的质量

同感
16 楼 foxlee 2008-12-17 09:21
aninfeel 写道

在公司用struts+guice+ibatis做了个后台,感觉还不错。
能否给个例子看看啊
15 楼 jkfzero 2008-12-17 09:16
flyleave 写道

这个单词怎么读啊


读juice。
14 楼 baseworld 2008-12-17 09:00
guice不是想做一个full-stack的全功能DI容器,这一点和是spring不同的,另外guice也可以结合spring使用,这些google code上都有说明

如果你的web应用的各个部分结合的很紧密的话,spring就很方便,但是如果你的web应用是基于服务的,比如通过RPC调用,那么服务部分就不需要spring的繁杂功能,此时guice就是一个很好的选择。单纯的DI和AOP功能就可以满足你的需求了。

guice的优点是spring无法比拟的,最重要的是简单,bob lee说了 guice只会simple and simpler。

不过有一点 guice2 从夏天跳票到秋天到现在 让人有点小不耐烦,不过从源码变迁看,差不多了,应该快了。
13 楼 seraphim871211 2008-12-17 08:57
aninfeel 写道

在公司用struts+guice+ibatis做了个后台,感觉还不错。

都struts了,还后台,无语了
12 楼 linginfanta 2008-12-17 08:47
又一个轮子
11 楼 yifeng 2008-12-17 02:17
支持Guice
10 楼 saharabear 2008-12-16 22:44
aninfeel 写道

在公司用struts+guice+ibatis做了个后台,感觉还不错。

可以做一个回调,就可以通过guice的AOP,通过注解实现事务管理了。

通过sqlmapper.
9 楼 aninfeel 2008-12-16 19:47
在公司用struts+guice+ibatis做了个后台,感觉还不错。
8 楼 saharabear 2008-12-16 15:31
Frederick 写道

个人觉得guice目前还无法实用吧。spring的成功,有很大一部分是其提供的大量对第三方工具的支持和集成,形成了一套完整的企业应用的开发的基础架构。guice在没有解决这个方面的问题之前,想取代spring恐怕不可能。如果使用guice作为开发一套框架的基础倒是还可以考虑

我们的东东全部在Guice上找建,性能稳定,应用方便,易于测试。
7 楼 herowzz 2008-12-16 15:26
Frederick 写道

个人觉得guice目前还无法实用吧。spring的成功,有很大一部分是其提供的大量对第三方工具的支持和集成,形成了一套完整的企业应用的开发的基础架构。guice在没有解决这个方面的问题之前,想取代spring恐怕不可能。如果使用guice作为开发一套框架的基础倒是还可以考虑


配合warp已经很不错了
6 楼 flyleave 2008-12-16 13:55
这个单词怎么读啊
5 楼 Frederick 2008-12-16 13:51
个人觉得guice目前还无法实用吧。
spring的成功,有很大一部分是其提供的大量对第三方工具的支持和集成,形成了一套完整的企业应用的开发的基础架构。
guice在没有解决这个方面的问题之前,想取代spring恐怕不可能。

如果使用guice作为开发一套框架的基础倒是还可以考虑
4 楼 freej 2008-12-16 13:44
看好Guice
3 楼 xijinn 2008-12-16 13:23
我还以为出2.0了呢,贴这文章过来
请保证新闻的质量
2 楼 l4borland 2008-12-16 13:05
一开始都是简单的.越到后面越复杂
1 楼 wangfy1685 2008-12-16 13:01
Guice 现在发展的怎么样了?记得两年前就做过了一个demo,当时还当成是spring的替代品呢

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Delphi模拟执行DOS命令

    Delphi程序界面中模拟Dos界面,可执行相关DOS命令

  • 浅谈DOS扩展器和DPMI

    浅谈DOS扩展器和DPMI  作者:TBsoft Software Studio(2005)  MS-DOS已经成为历史,但是DOS并没有消失。  没有MS-DOS,还可以使用FreeDOS等GNU DOS系统,现在许多计算机厂商在低档计算机中不预装昂贵的Windows,而预装FreeDOS,FreeDOS的网站是http:/

  • [ExpOS]开发经验

    1.djgpp下的make 可能不认识长文件名. 总说no rule to make .... 也可能是版本低. 总之使用短一点的文件名称好. 2.把bootsect osimg 使用copy /b 连接成一个文件. 可以直接作为vmWare的虚拟软驱使用. 真是方便.^_^ 注意:最好加上pad 使之大于1.44M. 3. NASM version 0.98 的bug ...

  • delphi 编写一个dos 窗体

    + //dos 仿真程序 delphi 窗体实现! function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRea...

  • Delphi中使用Dos窗口输出调试信息

    在项目文件 *.DPR (Project-&amp;gt;View Source)  里加上{$APPTYPE   CONSOLE}   然后,在需要输出处加上 Writeln(‘your debug message’);   另一方法是从网上找到的,未测试   在Delphi中输出后台调试信息有些时候,我们需要输出调试信息,但又不在界面上,也不希望弹出窗口中断执行,这时,只要用OutputD...

  • Unicode版Delphi模拟执行DOS命令

    原文件地址:http://download.csdn.net/detail/racelf/2824788#comment 在Delphi 7 ANSI编码可以编译。更高版本Unicode编码编译成功运行出错。 这里是修改后的版本。

  • delphi执行dos程序并回显

    执行dos命令,并在memo显示出来。不是直接调用cmd窗口显示。

  • 实现一个模拟CMD.exe命令编辑模式执行与显示的Delphi控件

       cmd.exe这个东西是Windows系统自带的执行Dos的一个灰常好的人机命令交互的执行方式,现在很多脚本语言也都带有这种即时解释的人机模式。当下由于工程的需要,也要做一个类似命令解释显示的编辑器,基本上完全模拟Cmd.exe的这种交互模式,昨天,基本上搞定了这种命令行的编辑器,这个东西的复杂之处就是在于编辑文字的处理,显示相对来说要容易的多,而编辑中最麻烦的一环就是多种处理模式,比如选中...

  • PE学习(二) IMAGE_DOS_HEADER

    Windows系统下的可执行文件,是基于Microsoft设计的一种新的文件结构,此结构被称之为PE结构。PE的意思是Portable Executable(可移植的执行体),所有Win32执行体都是用PE文件格式,其中包括SYS、DLL、EXE、COM、OCX等。 不管是学习逆向、破解还是安全,了解PE文件格式都是非常必要的。 PE文件的第一个部分是IMAGE_DOS_HEADER,大小为6

  • DELPHI如何执行DOS程序

    winexec(pchar(c:/test/test.bat), SW_SHOW);第一个参数表示DOS命令的全路径,第二个表示运行方式SW_SHOW:显示运行,可以看得见DOS窗口SW_HIDE:隐藏运行,看不见DOS窗口还有SW_MAXIMIZE最小化运行,等 

  • 在delphi中运行dos命令

    做了一个小软件,其中有delphi如何调用dos运算符,消息接收等机制.

  • [转载]关于Delphi中HInstance说明

    2010-04-09 14:56 本文转自 “猪悟能's博客” 几乎每一个提取资源的例子都用到了 HInstance, 做个对比测试:... var h,a,f: Cardinal; begin h := HInstance; a := Application.Handle; f := Self.Handle; ShowMessage(IntToStr(h

  • DOS头部IMAGE_DOS_HEADER

    对于一个PE文件来说,最开始的位置就是一个DOS程序。DOs

  • PHP语言基础知识详解及常见功能应用.docx

    本文详细介绍了PHP的基本语法、变量类型、运算符号以及文件上传和发邮件功能的实现方法,适合初学者了解和掌握PHP的基础知识。

Global site tag (gtag.js) - Google Analytics