大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

100个自媒体运营工具推荐

资源君

运营 工具软件 自媒体 资源分享 工具分享

HarmonyOS学习路之开发篇——Page Ability

爱吃土豆丝的打工人

HarmonyOS AbilitySlice路由 AbilitySlice生命周期 AbilitySlice间导航 跨设备迁移

一群不想鸡娃的直男程序员,决定对一支笔下手了

脑极体

以互联网行业为背景下的数据分析通识(上)

小飞象@木木自由

数据分析 数据分析体系 数据思维

你真的了解 equals 方法吗?

若尘

java编程 equals 6月日更

git版本升级

阿呆

企业云迁移暗藏风险,1人如何扛起性能测试大旗?

TakinTalks稳定性社区

高可用 电商 全链路压测 性能压测 云迁移

技术+商业,能否让网易智企一鸣惊人?

ToB行业头条

网易 tob

英特尔推出全新的基础设施处理器(IPU)

E科讯

HarmonyOS 分布式多端应用一站式开发平台(DevEco Studio 安装)

爱吃土豆丝的打工人

操作系统 HarmonyOS 环境变量 DevEco Studio 鸿蒙开发

HarmonyOS学习路之开发基础——快速入门(编写第一个页面)

爱吃土豆丝的打工人

HarmonyOS 鸿蒙应用开发 DevEco Studio 创建页面 鸿蒙开发第一个页面

解决权限管控难题,保障数据安全——CloudQuery在证券行业的实践

BinTools图尔兹

数据库 高可用 脱敏 数据库管理 权限管理

谁是项目的负责人?

escray

学习 极客时间 朱赟的技术管理课 6月日更

HarmonyOS学习路之开发基础知识——应用基础知识

爱吃土豆丝的打工人

鸿蒙 HarmonyOS 鸿蒙开发 鸿蒙系统

阿里巴巴新产“Java架构核心宝典”,全是流行技术,限时开放

Java 程序员 架构 面试

GIT基本概念与核心命令

IT视界

git 版本管理

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

Java 程序员 架构 面试

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevSecOps解决方案

JAVA笔记(二)--Java初始

加百利

Java 后端 6月日更

HarmonyOS学习路之开发基础——快速入门(实现页面跳转)

爱吃土豆丝的打工人

HarmonyOS DevEco 页面跳转 鸿蒙页面跳转

HarmonyOS学习路之开发篇——Ability

爱吃土豆丝的打工人

HarmonyOS Ability Ability概述 鸿蒙 Ability

有人融资超6亿,有人营收20亿…这届90后创业者有点猛! | 创业邦2021年30位30岁以下创业新贵重磅发布

创业邦

30家企业单笔融资1亿以上,如何让投资人倒追你的项目

创业邦

源码解析:一文读懂 Kubelet

张晓辉

Kubernetes 源码分析 kubelet

Seata 新特性,APM 支持 SkyWalking

阿里巴巴云原生

运维 云原生

HarmonyOS学习路之HarmonyOS 概述

爱吃土豆丝的打工人

操作系统 HarmonyOS 鸿蒙系统

HarmonyOS学习路之开发基础知识——资源文件

爱吃土豆丝的打工人

鸿蒙 HarmonyOS DevEco资源文件 创建资源文件

网络攻防学习笔记 Day45

穿过生命散发芬芳

网络攻防 6月日更

HarmonyOS学习路之开发基础知识——应用配置文件

爱吃土豆丝的打工人

HarmonyOS 鸿蒙开发 鸿蒙系统 鸿蒙配置文件 deviceConfig

HarmonyOS学习路之开发基础——快速入门(创建另一个页面)

爱吃土豆丝的打工人

HarmonyOS 鸿蒙开发 DevEco Studio 创建新页面 创建另一个页面

微服务的简介和技术栈

xcbeyond

微服务 发展史 6月日更

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