`
kyo100900
  • 浏览: 639376 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Guice2.0的变化——第二部分 从Guice1.0迁徙到2.0

阅读更多

Guice1.0 迁徙到 Guice2.0

 

Guice2.0 不完全向下兼容 Guice1.0 ,下面我们慢慢看。如果想看更详细的改变报告,请点击查看 http://google-guice.googlecode.com/svn/trunk/latest-api-diffs/changes.html

 

Exception Types

 

Guice1.0 版本时,当自定义的 provider 抛出一个 unchecked 异常时,有时 Guice 会把该异常进行封装,有时候却又不会。这取决于是否该 provider 是直接通过 Provider.get() 调用呢,还是间接通过注入其它类型的调用。

 

到了 Guice2.0 版本时,不管 provider injection 在任何时候抛出异常, Guice 都会将此再次封装成一个 ProvisionException( 呵呵,这和 Spring 封装 DataAccessException 真是如出一辙啊 ) 。这样的规则就简单多了嘛,使得更加容易的编写容错 (fault-tolerant) 代码。

 

比如说呢,如果 Injector 在创建时出现了问题,那么就会抛出 CreationException 。如果是运行期的配置出现问题,那么你将得到一个 ConfigurationException

 

现在 ProvisionException ConfigurationException OutOfScopeException 这三个异常都公开了,大家可以自由使用了。

 

 

<!----><!----> <!---->

Abstract Types

 

Guice 并不支持注入抽象类型( Guice2.0 仍然不支持) 。在 Guice1.0 的时候,因为这原因所抛出的异常信息并不算太友好,现在的 Guice2.0 围绕异常信息有了改观,原来一些潜在的错误现在都会报出相应的异常来了。

 

 

<!----><!----> <!---->

Inner Classes

 

Guice1.0 是支持内部非静态类的构造函数注入的,但这是过去的事了,现在已经不支持啦。 ( 注意:下面的代码只在 Guice1.0 时有效,如果想在 Guice2.0 中通过,得将 FakeFoo 设置为内部静态类 )

 

 

 

 

public class FooTest extends TestCase {
  public void testFoo() {
    Foo foo = Guice.createInjector().getInstance(FakeFoo.class)
  }

  class FakeFoo implements Foo {
    @Inject TestFoo() {...}
  }
}

 

 

Keys

 

 

如果你现在使用 com.google.inject.Key 话,你会发现 Guice 将基本数据类型 ( 比如说 int.class) 和数组类型 ( 比如说 Integer[].class) 都规范化了 (canonicalizes) 。现在还可以使用 @Providers 来绑定像 List<?> 这样的通配符了。

 

我简单说说。如果大家使用过 Guice1.0 的话,会发现以下面的代码是错误的:

 

assertEquals(Key.get(int.class), Key.get(Integer.class));

 

 

现在,在 Guice2.0 中这个问题已经修复了,但是如果你要这么使用:

 

assertEquals(TypeLiteral.get(int.class), TypeLiteral.get(Integer.class));

 

<!----><!----> <!---->

这样仍然是通过不过的,所以这个只针对 com.google.inject.Key

 

 

 

<!----><!----> <!---->

Annotation Implementations

 

Guice2.0 修改了对那些没有属性标注 (filedless annotations) 的处理方式——强制你必须实现 equals() hashCode() 两个方法。如果以前在 Guice1.0 中没有实现这两个方法恰巧又能用,现在注意已经在 Guice2.0 中已经无法正常使用了。

 

 

Injector.getBinding

 

Guice2.0 会在绑定的类或接口无法正常解析时,抛出异常。但原来的老版本 Guice1.0 会简单的返回一个 null 。如果你还是想这么做的话,可以调用 injector.getBindings().get(key) 来实现。

 

 

SPI Changes

 

SourceProviders 已经被 Binder.withSource Binder.skipSources 替代了。这些新的方法相对来说更容易调用和测试,毕竟它们并不需要什么静态初始化 ( static initialization ) 或静态依赖 ( static dependencies ) 之类的了。

 

 

 

 

 

全文完.............

 

 

9
1
分享到:
评论
1 楼 harry 2009-01-20  
翻译的不错,呵呵

相关推荐

    guice-2.0.jar

    guice-2.0.jar guice-2.0.jar

    struts2+ibatis3+guice2.0使用完整例子

    采用的框架是struts2.1.8,ibatis3,guice2.0,完整的产品模块和权限模块(部分功能)例子。这是smeite.com商城第一版本的部分代码,测试通过。 希望给需要的朋友一个借鉴。 自我认为是学习Ibatis3比较好的例子,覆盖...

    Guice2.0+Hibernate3.2+warp-persist-2.0+Struts2+JPA

    轻量级的Guice2.0代替了Spring,速度更快,项目体积更小,Hibernate3.2与JPA的结合使用代替了传统的配置文件,使Hibernate的开发更简单,本项目基本上是零配置开发,由于我只能上传小于15M的文件,故JAR被我删除了,...

    Robojuice jar 包文件下载(内含guice-2.0-no_aop.jar 和roboguice-1.1.2.jar )

    这个jar包文件下载包含两个重要的组件:`guice-2.0-no_aop.jar`和`roboguice-1.1.2.jar`。在这里,我们深入探讨这两个组件以及它们在Android开发中的作用。 首先,让我们了解Guice。Guice是一个轻量级的依赖注入...

    guice-1.0.jar

    guice-1.0.jar guice-1.0.jar

    guice-2.0-no_aop.jar

    guice-2.0-no_aop.jar

    google Guice 1.0 用户指南 中文

    "google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...

    guice-spring-1.0.jar

    guice-spring-1.0.jar

    guice-servlet-1.0.jar

    guice-servlet-1.0.jar

    guice.jar/guice.jar

    guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar

    Google Guice入世(转 附带一Guice1.0的简单测试代码)

    依赖注入(Dependency Injection,DI)是一种设计模式,其核心思想是将对象的创建和组装过程从对象本身剥离出来,由一个外部容器(如Guice)负责处理。这样可以提高代码的可测试性、可维护性和可扩展性。 Guice通过...

    基于guice的简单项目

    首先,我们需要理解Guice的核心概念——Injector。Injector是Guice的核心类,它负责创建对象并管理它们的生命周期。通过Injector,我们可以将依赖关系从代码中解耦,使得对象的创建和配置更加灵活和易于测试。 在这...

    nfsdb-guice-1.0.zip

    【标题】"nfsdb-guice-1.0.zip" 涉及的主要知识点是NFSDB(Network File System Database)与Guice框架的集成,版本为1.0。NFSDB是一种分布式、高性能的数据库系统,常用于处理大规模的数据存储和检索。Guice则是...

    java guice dependency injection tutorial

    ### Java Guice 依赖注入教程 #### 概述 本文档详细介绍如何利用 Google 开源的依赖注入框架 Guice 进行 Java 开发...随着 Guice 2.0 的推出,开发者将能够体验到更多的新功能和改进,进一步提升开发效率和代码质量。

    goole-guice所有JAR包

    2. **模块(Module)**:Guice的配置主要通过自定义模块来完成,模块定义了哪些类应被注入以及它们如何相互关联。开发者可以通过扩展`AbstractModule`类并覆盖`configure()`方法来创建自己的模块。 3. **绑定...

    guice-spring-3.2.3.zip

    标题 "guice-spring-3.2.3.zip" 提示我们关注的是Guice与Spring框架的一个特定版本的集成,即Guice 3.2.3与Spring的整合。Guice是一个轻量级的依赖注入(DI)框架,由Google开发,它允许开发者通过注解来管理对象的...

    guice-2.0-no_aop.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    spring security 4 需要 jar 包

    guice-2.0-javadoc.jar guice-2.0-sources.jar guice-2.0-src.jar guice-2.0.jar httpclient-4.1.1.jar jsr250-api-1.0.jar ldapsdk-4.1.jar openid4java-nodeps-0.9.6.jar shared-ldap-0.9.15-sources.jar shared-...

Global site tag (gtag.js) - Google Analytics