随着 Guice 的最初发行版慢慢尘埃落定,将它和 Spring IoC,尤其是和 Spring JavaConfig 进行的比较也随之浮出水面。Guice 和 JavaConfig 采取了两种不同的方式使用 Java Annotations 将 IoC 配置放入代码。
目前 Spring JavaConfig 发布了 1.0 Milestone 1 版本,它和 Guice 的基本想法是一致的——把配置从 XML 移至 Annotation 是一种更好的做法,因为这样使得配置信息与代码更为紧密。Tapestry 的 IoC 容器也是根据同样的想法设计的。
JavaConfig 和 Guice 的背景极其相似。事实上,Bob Lee 是这样叙述它们的历史的:
此外,我还想说一个有点意思的小故事:Guice 最开始的时候和 Spring JavaConfig 看起来非常像——这并不奇怪,因为 Rod 一年前向我展示了 Spring JavaConfig(而六个月前我又让他看了 Guice)。正如使用 JavaConfig 一样,你得显式地写 Java 代码来连接你的对象。我从一开始就引入 @Inject 做为检查外部代码按照你的安排调用所有的 setters 的一种可选方式。而自打我们有了 @Inject,我开始问,我们为什么还需要显式地编写对象连接代码呢?于是很快我们就有大家今天所知道的 Guice。
关于 Guice 和 JavaConfig 区别的帖子有不少。Debasish Ghosh 恰如其分地总结到:
Guice 和 Spring 之间最主要的区别,可以归结为它们看待依赖关系和配置的哲学之间的差异。Spring 宣扬的是非侵入性的方式,以一种完全外部化的方式来对待对象依赖关系。在 Spring 里,你可以使用 XML、Spring JavaConfig 或者 Groovy-Spring DSL 来连接对象依赖关系,也可以使用其它的方案,如 Spring-annotations。但是,不管你用的是什么技术,依赖关系总是被外部化的。
另一方面,Guice 却把配置做为你的应用程序模型的首要对象来看待,允许它们存在于你的领域模型代码中。我们使用 Guice 模块来说明需要注入什么东西,然后使用 annotations 来指明需要在什么注入。你可以使用注入来标记(annotate)类本深(通过 @Inject annotation)。缺点则是(如果你使者么认为的话)你必须在你的领域模型中引入 com.google.inject.*。但它通过元数据编程(metadata programming)来确保了目标的方向性,以及注入的显式语义。
在这些文章的回帖中,你可以发现,在这两个框架之间做选择的时候,最值得注意的就是它们设计哲学的区别。你会希望依赖注入和代码靠得有多近呢?如果使用 Guice,你的代码将和容器紧密耦合在一起,这样做有些人喜欢,有些人反感。Guice 号称自己的速度更快,但值得注意的是,Spring IoC 容器(不管是 JavaConfig 还是其它)支持多种钩子,而 Guice 并没有提供。Spring 为大家带来的不仅仅是 IoC,而 Guice 并不打算解决那些大问题。
分享到:
相关推荐
赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Ratpack-Guice-Config是针对Ratpack框架与Guice依赖注入库的扩展,它提供了对配置管理的增强功能,使得在Ratpack应用中能够方便地注入和管理配置参数。Ratpack是一个高性能、反应式的Web应用程序框架,而Guice则是...
### Java on Guice:深入理解依赖注入 #### 核心概念与价值 “Java on Guice”这篇文档探讨了依赖注入(Dependency Injection, DI)在Java应用中的实践方式及其带来的诸多好处。它由Google的Bob Lee和Kevin ...
sisu-guice-2.1.7-noaop.jar
本书《Google Guice: Agile Lightweight Dependency Injection Framework》旨在深入探讨Guice的核心概念和技术细节,并通过丰富的示例和背景信息帮助读者全面掌握这一强大的工具。 #### 二、Guice概述 Guice是由...
在 Java 开发中,MyBatis 用于处理 SQL 操作,而 Guice 则用于管理对象的生命周期和依赖关系。这个项目提供了一个示例,展示如何在实际应用中有效地结合两者,使得代码更加简洁、可维护。 MyBatis 是一个轻量级的...
4. **注解驱动**:Guice使用Java的注解(如`@Inject`、`@Singleton`等)来标记和配置依赖。`@Inject`用于声明依赖,`@Singleton`表示单例模式,确保一个类型在整个应用程序中只有一个实例。 5. **测试**:在Guice中...
Guice的依赖注入机制是通过使用注解(Annotation)来实现的。例如,在上面的代码中,我们使用了@Inject注解来告诉容器,这里的service对象的引用,需要进行注入。Guice会在运行时动态地将MyServiceImpl对象赋给...
赠送jar包:guice-assistedinject-3.0.jar; 赠送原API文档:guice-assistedinject-3.0-javadoc.jar; 赠送源代码:guice-assistedinject...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
总的来说,Shiro 和 Guice 的整合为 Java 应用提供了一种高效、灵活的权限管理方案。Guice 的轻量级特性和 Shiro 的强大功能相结合,使得开发者可以方便地实现细粒度的权限控制,同时保持应用的高性能和简洁性。通过...
5. **注解处理(Annotation Processing)**:Guice使用Java的注解处理工具(APT)在编译时生成元数据,从而在运行时提高效率。这包括生成代理类和绑定类。 6. **AOP(面向切面编程)支持**:虽然Guice不是专门的AOP...
Guice通过提供一种声明性的方式来管理对象的生命周期和依赖关系,使得代码更易于测试、扩展和维护。`guice-2.0-no_aop.jar`是Guice的一个版本,不包含Aspect Oriented Programming(AOP)支持,这可能是因为在...
例如,在上面的例子中,我们可以使用 Guice 来注入 Service 对象到 Client 对象中,而不需要使用工厂模式或其他方式来获取 Service 对象。这可以使得 Client 对象更加灵活和可维护。 Guice 的优越性体现在以下几个...
Guice,全称为Google Guice,是一款由Google开发的轻量级依赖注入(Dependency Injection,简称DI)框架,主要用于简化Java应用的初始化和组件管理。依赖注入是一种设计模式,它可以帮助开发者解耦代码,提高软件的...
#### Guice:一种简化依赖注入的框架 Guice 是 Google 推出的一款开源依赖注入(Dependency Injection,简称 DI)框架,专为 Java 开发设计。它极大地简化了开发过程中的工厂模式编写工作,提高了代码的可测试性和...
赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Guice 提供了一种简洁、类型安全的方式来管理应用程序中的对象生命周期和依赖关系。 **依赖注入的核心概念** 1. **依赖**: 在一个类中,如果需要使用另一个类的服务,那么这个被引用的类就称为依赖。 2. **注入**:...
Guice-3.0是Guice的一个版本,包含了核心库guice-3.0.jar,以及与Spring和Struts2集成的扩展库guice-spring-3.0.jar和guice-struts2-plugin-3.0.jar。 1. **Guice核心概念**: - **依赖注入**:Guice的核心机制,...
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar