写点什么

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:301668
用户头像

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

关注

评论

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

百度学术AI重构:上线AI学术搜索、AI论文图谱、AI阅读等数十项能力

极客天地

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 无代码 版本更新

玩转n8n测试自动化:核心节点详解与测试实战指南

测吧(北京)科技有限公司

# 学生视角下平凯数据库敏捷模式的学习与探索体验

TiDB 社区干货传送门

基于 Smart Meter Web,深入实践 KWDB 跨模查询

KaiwuDB

“凭什么说你比我先?”——没有上帝时钟,如何判断“谁先谁后”?

poemyang

分布式 分布式系统

平凯数据库敏捷模式体验:助力电商行业实现降本增效

TiDB 社区干货传送门

版本测评 性能测评 敏捷模式

如何从CST软件中导出多层dxf文件

思茂信息

仿真 cst 电磁仿真 CST Studio Suite

大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例

武子康

Java 大数据 flink spark 分布式

付费广告 VS 达人营销:哪个更适合出海品牌?

Wolink

跨境电商 出海 海外营销推广 沃链Wolink 达人营销

关于 decimal 精度问题

TiDB 社区干货传送门

8.x 实践

一家“小而杂”的零售SaaS公司,为什么把数据库从 MySQL “搬”上平凯数据库(TiDB 企业版)敏捷模式?

TiDB 社区干货传送门

基于海外舆情监测数据反向指导的本地化营销策略

沃观Wovision

跨境电商 出海企业 沃观Wovision 舆情监测系统 海外舆情监测

TEM on 腾讯云试用小结

TiDB 社区干货传送门

管理与运维 TEM 试用

TiDB敏捷模式部署测试

TiDB 社区干货传送门

TEM 试用

国产化浪潮中如何评估一款国产数据库的真实实力

TiDB 社区干货传送门

技术趋势 国产化替代 TiDB第四届征文-运维开发之旅 TiDB第四届征文-业务场景实战

哈尔滨三级等保的重要价值:筑牢安全防线与助力发展

等保测评

1688商品评论API调用全流程:从注册到Python实现

tbapi

1688商品评论接口 1688商品评论API 1688API 1688评论API 1688商品评论采集

豫见 AI,聚力前行 | 北大明天正式成为和鲸科技河南省总代理

ModelWhale

AI 人工智能+ 科研智能一体机

离线部署tidb-8.5.3

TiDB 社区干货传送门

平凯数据库(TiDB 企业版)敏捷模式数据库试用

TiDB 社区干货传送门

TEM 试用

我和 TiDB 的故事,是偶然也是一种必然

TiDB 社区干货传送门

TiDB第四届征文-运维开发之旅

【TiDB 高可用实践】基于Haproxy+keepalived实现负载均衡

TiDB 社区干货传送门

TiDB第四届征文-运维开发之旅 TiDB第四届征文-业务场景实战

TiDB MCP Server 实践和思考

TiDB 社区干货传送门

TiDB第四届征文-运维开发之旅

AI 低代码管理平台有哪些:现状探讨与国内品牌盘点

科技热闻

纵横G700即将开启预售,以“全领域豪华电混越野SUV”标记新时代

科技热闻

DeepSeek vs GLM激辩:华为开发者空间部署BISHENG平台轻松构建终极AI辩论赛

华为云开发者联盟

毕昇 企业 AI 应用 华为开发者空间

社区活动 | TiDB 社区第四届专栏征文大赛联合墨天轮开启,TiDB 业务场景实战、运维开发攻略两大赛道,BOSE 降噪耳机、大疆手持云台、投影仪、运动手环、礼品卡等重磅礼品等你来拿!

TiDB 社区干货传送门

社区活动

两种 TiDB 备份方案任你选择:NFS or S3(内含操作实践/备份/恢复)

TiDB 社区干货传送门

TiDB第四届征文-运维开发之旅 TiDB第四届征文-业务场景实战

TiDB集群运维管控试用

TiDB 社区干货传送门

TEM 试用

从 1 台服务器起步!TiDB 企业版敏捷模式试用:低成本享分布式数据库核心能力

TiDB 社区干货传送门

集群管理 TEM 试用 部署与初始化

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