写点什么

Guice 和 JavaConfig:使用 Annotation 进行反转控制的两种方式

  • 2007-03-27
  • 本文字数:1082 字

    阅读完需:约 4 分钟

随着 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 并不打算解决那些大问题。

2007-03-27 15:301809
用户头像

发布了 117 篇内容, 共 21.2 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

YashanDB数据库监控与性能调优实用指南

数据库砖家

YashanDB数据库冷热数据分层存储策略分析

数据库砖家

YashanDB数据库架构设计的最新实践与指导

数据库砖家

YashanDB数据库批量数据处理的最佳实践指南

数据库砖家

YashanDB数据库权限细化管控策略

数据库砖家

YashanDB数据库全生命周期管理最佳实践

数据库砖家

YashanDB数据库加速企业数据分析效率的多维策略

数据库砖家

YashanDB数据库灵活的事务隔离级别解析与应用

数据库砖家

YashanDB数据库内存管理机制及性能提升技巧揭秘

数据库砖家

YashanDB数据库连接池优化及性能提升技巧

数据库砖家

YashanDB数据库迁移的五大步骤详解

数据库砖家

YashanDB数据库迁移全流程实用操作手册.

数据库砖家

YashanDB数据库权限控制策略与合规性要求解读

数据库砖家

YashanDB数据库面向大数据时代的存储优化策略

数据库砖家

YashanDB数据库架构下的数据一致性保障机制详解

数据库砖家

YashanDB数据库监控与日志分析的专业策略.

数据库砖家

如何快速低成本自建埋点系统?基于ClkLog的开源解决方案

ClkLog

开源 埋点 用户分析 画像

YashanDB数据库跨平台部署策略与经验分享

数据库砖家

YashanDB数据库跨平台部署及管理实用技巧分析

数据库砖家

YashanDB数据库跨平台部署与兼容性分析

数据库砖家

YashanDB数据库日志管理及故障恢复策略全面讲解.

数据库砖家

YashanDB数据库集成多源数据的关键技术与步骤

数据库砖家

YashanDB数据库交易机制确保业务连续性的关键技术

数据库砖家

Pycharm错误:JetBrains AI URL resolution failure

codists

Python

YashanDB数据库面向物联网场景的优化策略

数据库砖家

YashanDB数据库面向物联网大数据的优化策略

数据库砖家

YashanDB数据库日志分析助力故障快速定位.

数据库砖家

YashanDB数据库集群管理的实用操作手册

数据库砖家

YashanDB数据库技术支持服务评估与选择指南

数据库砖家

YashanDB数据库日志策略及故障恢复流程

数据库砖家

YashanDB数据库日志管理及故障排查技巧

数据库砖家

Guice和JavaConfig:使用Annotation进行反转控制的两种方式_Java_Rob Thornton_InfoQ精选文章