写点什么

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

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

关注

评论

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

20余年运维实践经验总结!一本书掌握数字化运维方法

嘉为蓝鲸

运维 数字化转型 运维管理 IT 运维

一文快速读懂消息推送的到达率、转化率和卸载率

MobTech袤博科技

内部人士揭秘:千万不要关闭手机一键登录验证

MobTech袤博科技

K8s技术全景:架构、应用与优化

不在线第一只蜗牛

架构 Kubernetes 容器

10分钟说清楚,秒验一键认证除了快,还有哪些优点?

MobTech袤博科技

抖音、小红书都在用的秒验一键登录验证方式,到底好在哪?

MobTech袤博科技

高维解码|Redis 收紧许可证!开源软件公司如何在云时代生存?

Zilliz

redis 开源 许可证 Zilliz 开源公司

QAnything-1.3.0,支持纯python笔记本运行,支持混合检索

有道技术团队

MobTech积极参与鸿蒙生态建设,HarmonyOS NEXT鸿蒙星河版产品即将发布

MobTech袤博科技

哪个好人,2024年还在做push攻略科普啊!

MobTech袤博科技

10年产品经理教你快速提升消息推送的点击率

MobTech袤博科技

聚道云连接器打通红圈CRM和金蝶云星辰,赋能环境科技公司数字化转型

聚道云软件连接器

案例分享

开创加密资产新纪元:深度解析ERC-314协议

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)

流量见顶了以后,APP为何仍然要使用推送通知?

MobTech袤博科技

如何选择高防服务器?稳定性与安全性兼备

一只扑棱蛾子

高防服务器

10年大厂运营大咖告诉你,如何有效应对消息推送厂商配额

MobTech袤博科技

2024年本机一键验证登录最强指南已出,请查收!

MobTech袤博科技

都2024年了,你还不知道一键登录怎么选吗?

MobTech袤博科技

数仓调优实战:GUC参数调优

快乐非自愿限量之名

数仓 数仓架构

如何搭建企业级MQ消息集成平台

RestCloud

ipaas MQ消息

为什么 80% 的码农都做不了架构师?

秃头小帅oi

云手机提供私域流量变现方案

Ogcloud

私域运营 私域流量运营 云手机 海外云手机 跨境云手机

软件测试学习笔记丨自动化测试策略

测试人

软件测试 自动化测试 测试开发

3分钟教你最大化利用APP消息推送(Push)在运营中的优势

MobTech袤博科技

秒验资深玩家熬夜整理的15个常见问题,拿走不谢!

MobTech袤博科技

秒验:让APP验证和登录远不只是便捷

MobTech袤博科技

海外云手机:跨境电商引流的利器

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

上传应用程序到苹果应用商店的工具和要求

雪奈椰子

海外云手机助力出海电商引流获客

Ogcloud

云手机 海外云手机 云手机海外版 电商云手机 跨境云手机

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