Spring 依赖注入 & Java 5(包括幻灯片和代码)

工程 | Alef Arendsen | 2008 年 3 月 18 日 | ...

我在前往开罗的路上写下这篇博客。我们正飞过意大利西部,我能清晰地看到意大利的海岸线,海水湛蓝,海浪温柔地涌向岸边。那里的景色一定很美。我去开罗是为了参加由 Ahmed Hashim 组织的埃及用户组会议,我相信他一定会做得非常出色。我将就 Spring 进行演讲,这次的主题是依赖注入、类型安全和 Java 5。昨天(也就是 3 月 14 日),我在荷兰 Loenen 的 Profict 冬令营为大约 60 或 70 名听众做了几乎相同的演讲。

最近有很多关于类型安全、Spring 和其他依赖注入方法的话题。我发现人们太经常地提到 Spring 的依赖注入特性不具有类型安全,更糟糕的是,有人甚至说 Spring 依赖于 XML。由于我不能一直望着飞机窗外(好吧,我可能可以,但这没太大用处),我决定写一篇短博客,介绍 Spring 和 Java 5 的依赖注入的当前状态。

随着 Spring 2.5 中新特性的加入以及 Spring 的子项目 JavaConfig 的出现,关于类型安全以及 Spring 绑定于 XML 的论点已经不再成立。虽然过去我们一直说 Spring 不与 XML 耦合,但表达配置细节的唯一可行选择确实是 XML。但自从 Spring 2.5 以来,这不再是一个理论上的论点;现在有了一个使用纯 Java 配置依赖的切实可用的选项。

Spring @Autowired 支持

Spring 2.5 本身提供了基于注解的依赖注入,通过使用 @Autowired 注解和 @Qualifier 注解(或任何其他自定义注解)向 Spring 容器提供注入依赖的提示。我这里不会介绍整个机制。相反,我将重点介绍涉及 @Autowired 方法的博客文章和文章。
  • Rod Johnson 的Spring Framework 2.5 介绍
  • Juergen Hoeller 的Spring 2.5 的全面注解支持
  • Mark Fisher 的在 Spring 2.5 中自定义注解配置和组件检测
  • Spring JavaConfig

    除了 @Autowired 支持之外,Spring JavaConfig 提供了一种全新的依赖注入方法。已经有很多博客文章讨论过 JavaConfig,所以我不会在这里再次完整解释它。我最近收到了一些关于 JavaConfig 状态的问题。这个项目已经有一段时间没有发布里程碑版本了。这当然不是没有原因的。虽然模型已经运行得相当好,但我们还有一些细节需要完善。我们希望发布一个我们百分之百满意的版本,目前它尚未完成。请关注JavaConfig 项目页面和本博客。新的里程碑版本即将发布。

    JavaConfig 方法也在各种博客文章中进行了更详细的介绍

    正如我在 Loenen 和开罗的演讲中也说过的那样,Spring JavaConfig 尚未完成。仍有一些细节需要完善,以创建一个流畅的 DI 语言,支持基于 XML 的 DI 语言所具备的所有特性。在这方面(如果你愿意的话),你可以给我们很大的帮助。尝试 Spring JavaConfig 并告诉我们你的想法!

    结论

    我在昨天的演讲中试图传达的另一个相当重要的观点是,将 Spring 容器视为一个依赖注入平台,并在其之上实现了各种 DI 风格。第一种风格,即基于 XML 的方法,已经存在 5 年了。第二种风格也已经存在相当长一段时间,现在为 BEA WebLogic 10 版本中的 EJB3 SessionBean 功能提供了基础(也以 Pitchfork 的名称在公共领域可用)。我们发布的最后一种风格是 @Autowired 风格,接下来是 JavaConfig。拥有这个平台对我们来说至关重要。它将帮助我们为你提供良好的体验,并提供全面的向后兼容性,无论你使用 JavaConfig、@Autowired 还是我们基于 XML 的方法(或者,同时使用所有这些方法)。

    关于源代码和幻灯片

    在幻灯片中,你会看到我放入了一张福特 Model T 的图片。我描述依赖注入时总是使用的类比是汽车装配线。没有汽车装配线(根据维基百科),福特每月只能生产 11 辆 Model T。有了装配线,一辆 Model T 只需 93 分钟。将(不知道它们将如何组装的)零件组装成一辆能工作的汽车的标准化流程非常有利。在我看来,采用不触及主线逻辑的方法非常重要。JavaConfig 提供了这一点。

    代码也已附加。它依赖于 JTA API(演示使用了 Hibernate),而 JTA API 没有安装在 Maven Repository 中。 Lucio Benfante 在他的博客中介绍了如何解决这个问题(将 JTA API 安装到你的本地 Repository)。

    安装 JTA API 后,运行 com.carplant.plant 包中的 CarPlantIntegrationTests,并阅读类注释。注释解释了如何启用 JavaConfig、Autowire 配置和 XML 配置(JavaConfig 默认已启用)。

    [更新] 添加了一个关于 JavaConfig 的资源

订阅 Spring 新闻通讯

订阅 Spring 新闻通讯保持联系

订阅

先行一步

VMware 提供培训和认证,助你快速前进。

了解更多

获得支持

Tanzu Spring 通过一项简单的订阅提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举办的活动

查看 Spring 社区即将举办的所有活动。

查看全部