AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

Flink 流批一体方案在数禾的实践

Apache Flink

大数据 实时计算 flinkl

字节跳动 Flink 大规模云原生化实践

Apache Flink

大数据 flink 实时计算

YRCloudFile V6.10.0 功能新增对 NVIDIA GPUDirect 与回收站的支持

焱融科技

#高性能 #分布式文件存储 #文件存储 #全闪存储 #容器存储

IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践

JackJiang

即时通讯 即时通讯IM

一看就懂,一学就会的Raft解析

爱德华

raft PAXOS 共识算法 深入理解分布式共识算法

一个有效的图表图像数据提取框架

合合技术团队

人工智能 计算机视觉 表格识别 图象识别

社招内推!JAVA、测开、数仓、前端均有坑

Qunar技术沙龙

互联网 工作 社招

云原生容器高可用运维能力应用

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

深度访谈 NXTF_ 负责人|虚实联动才是通向未来的数字通行证

万事ONES

专业的RAW图片处理:DxO PhotoLab 6 中文直装版

真大的脸盆

Mac Mac 软件 raw raw图片处理软件 Raw图像处理软件

官方文档 | 【JVM调优体系】「GC底层调优实战」XPocket为终结性能问题而生—开发指南

码界西柚

Java JVM 3月日更 XPocket 技术 优化体系

基础篇丨链路追踪(Tracing)其实很简单

阿里巴巴云原生

阿里云 云原生 Tracing

LED显示屏与DLP拼接屏的优缺点分析

Dylan

LED LED显示屏 户外LED显示屏

全球开源盛会!GOTC 2023 即将拉开帷幕,15 大分论坛不容错过!

kk-OSC

大会 #开源

Github上获赞59.8K的面试神技—1658页《Java面试突击核心讲》

Java你猿哥

Java 架构 面试 面经 春招

Alibaba官方上线!Java并发编程全彩图册(终极版)GitHub已置顶

Java 并发编程 多线程 高并发

普通程序员要成为架构师,需要掌握哪些知识体系?

程序员小毕

Java 面试 程序人生 后端 架构师

几种快速传输大文件的方式

镭速

NFTScan 与 Dmail 达成合作伙伴,双方在 NFT 数据领域展开合作

NFT Research

NFT

GPT-5紧急叫停?千名专家联名呼吁,AI技术的未来又该何去何从?

加入高科技仿生人

人工智能 AI技术 ChatGPT GPT-4

一文告诉你如何一键复现“TSBS 时序数据库性能基准测试报告”测试结果

TDengine

tdengine 性能测试 时序数据库

测试流程规范如何推动落地?

老张

软件测试 目标识别 流程规范

百套Web工业组态模板图库(长期更新)

2D3D前端可视化开发

组态软件 工业组态 组态图库 web组态图库 组态界面

最全金融数据安全政策汇编,你应该需要它!( 附下载 )

极盾科技

数据安全

扫盲篇:Java中为啥一个 main 方法就能启动项目?

Java你猿哥

Java JVM ssm Java工程师

云图说 | MSSI之应用业务模型ABM,搭建业务与技术的数据治理桥梁

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

人工智能迎来iPhone时刻,拟人化AI进入爆发前夜

硬科技星球

超级MMM互助盘DAPP系统开发源代码(案例演示)

开发微hkkf5566

全国首个政企采购云平台:政采云基于 Dubbo 的混合云跨网方案实践

阿里巴巴云原生

阿里云 云原生 dubbo

在GitHub首页3分钟被下架!爱奇艺《高并发网关设计》笔记被盗?

Java 负载均衡 高并发 网关设计

Linux 的 TCP 连接数量最大不能超过 65535?

Java你猿哥

Java Linux 后端 ssm

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