从
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
)
之类的了。
全文完.............
分享到:
相关推荐
guice-2.0.jar guice-2.0.jar
采用的框架是struts2.1.8,ibatis3,guice2.0,完整的产品模块和权限模块(部分功能)例子。这是smeite.com商城第一版本的部分代码,测试通过。 希望给需要的朋友一个借鉴。 自我认为是学习Ibatis3比较好的例子,覆盖...
轻量级的Guice2.0代替了Spring,速度更快,项目体积更小,Hibernate3.2与JPA的结合使用代替了传统的配置文件,使Hibernate的开发更简单,本项目基本上是零配置开发,由于我只能上传小于15M的文件,故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-2.0-no_aop.jar
"google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...
guice-spring-1.0.jar
guice-servlet-1.0.jar
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
依赖注入(Dependency Injection,DI)是一种设计模式,其核心思想是将对象的创建和组装过程从对象本身剥离出来,由一个外部容器(如Guice)负责处理。这样可以提高代码的可测试性、可维护性和可扩展性。 Guice通过...
首先,我们需要理解Guice的核心概念——Injector。Injector是Guice的核心类,它负责创建对象并管理它们的生命周期。通过Injector,我们可以将依赖关系从代码中解耦,使得对象的创建和配置更加灵活和易于测试。 在这...
【标题】"nfsdb-guice-1.0.zip" 涉及的主要知识点是NFSDB(Network File System Database)与Guice框架的集成,版本为1.0。NFSDB是一种分布式、高性能的数据库系统,常用于处理大规模的数据存储和检索。Guice则是...
### Java Guice 依赖注入教程 #### 概述 本文档详细介绍如何利用 Google 开源的依赖注入框架 Guice 进行 Java 开发...随着 Guice 2.0 的推出,开发者将能够体验到更多的新功能和改进,进一步提升开发效率和代码质量。
2. **模块(Module)**:Guice的配置主要通过自定义模块来完成,模块定义了哪些类应被注入以及它们如何相互关联。开发者可以通过扩展`AbstractModule`类并覆盖`configure()`方法来创建自己的模块。 3. **绑定...
标题 "guice-spring-3.2.3.zip" 提示我们关注的是Guice与Spring框架的一个特定版本的集成,即Guice 3.2.3与Spring的整合。Guice是一个轻量级的依赖注入(DI)框架,由Google开发,它允许开发者通过注解来管理对象的...
中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...
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-...