zslin0 2009-06-19
Spring Framework 为 Web 和企业应用程序提供了坚实的基础。通过支持 Groovy 等动态语言,Spring 添加了一些功能,从而使应用程序架构更加灵活、更具动态性。在包含 2 部分的系列文章 的第一部分中,您将学习将 Groovy 集成到 Spring 应用程序的基础知识。
Spring 2.0 支持将动态语言集成到基于 Spring 的应用程序中。Spring 开箱即用地支持 Groovy、JRuby 和 BeanShell.以 Groovy、JRuby 或任何受支持的语言(当然包括 Java? 语言)编写的应用程序部分可以无缝地集成到 Spring 应用程序中。应用程序其他部分的代码不需要知道或关心单个 Spring bean 的实现语言。
Spring 支持动态语言意味着应用程序可以获得灵活性和动态性,并且没有任何附加条件。在本系列的第 1 部分中,您将看到如何将 Spring 和 Groovy 一起使用,以及这个强大集成如何为应用程序增加有趣的功能。例如,您可能需要频繁地更改小块的业务逻辑、应用程序发出的 e-mail 消息中包含的文本、应用程序生成的 PDF 格式和布局等。为了进行更改,传统的应用程序架构可能需要完全重新部署应用程序。Spring 支持 Groovy 之后,您可以这样更改一个已部署的应用程序,并使这些更改立即生效。我将讨论这一功能为应用程序所带来的好处,以及可能引发的问题。本文中所有例子的完整的源代码(参见 下载)都可以下载。
Spring 的动态语言支持
动态语言支持将 Spring 从一个以 Java 为中心的应用程序框架改变成一个以 JVM 为中心的应用程序框架。现在,Spring 不再只是让 Java 开发变得更容易。它还允许将以静态和动态语言编写的代码轻松地插入到 Spring 支持的分层架构方法中,从而使 JVM 的开发也变得更加容易。如果您已经熟悉 Spring,那么您会感到很舒服:可以利用 Spring 已经提供的所有特性 ― 控制反转(IoC)和依赖项注入、面向方面编程(AOP)、声明式事务划分、Web 和数据访问框架集成、远程调用等 ― 同时又可以使用灵活动态的语言,比如 Groovy.
Spring 通过 ScriptFactory 和 ScriptSource 接口支持动态语言集成。ScriptFactory 接口定义用于创建和配置脚本 Spring bean 的机制。理论上,所有在 JVM 上运行语言都受支持,因此可以选择特定的语言来创建自己的实现。ScriptSource 定义 Spring 如何访问实际的脚本源代码;例如,通过文件系统或 URL.Groovy 语言集成通过 ScriptFactory 的 GroovyScriptFactory 实现得到支持。
为什么是 Groovy?
根据官方的 Groovy 站点,Groovy 是 “用于 Java 虚拟机的一种敏捷的动态语言”,它 “以 Java 的强大功能为基础,同时又包含由 Python、Ruby 和 Smalltalk 等语言带来的强大附加功能”,例如动态类型转换、闭包和元编程(metaprogramming)支持(参见参考资料)。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。我喜欢将它看作是没有讨厌代码,但又具有闭包和动态语言中的其他特性的 Java 语言。
Groovy 特别适合与 Spring 的动态语言支持一起使用,因为它是专门为 JVM 设计的,设计时充分考虑了 Java 集成,这使 Groovy 与 Java 代码的互操作很容易。它的类 Java 语法对于 Java 开发人员来说也很自然。
结束语
您已经看到了配置 Groovy 语言 bean 的一些不同的方式,以及在基于 Spring 的应用程序中使用它们是多么容易。您可以像使用 Java 类一样使用已编译的 Groovy 类。您还看到了配置用脚本编写的 Groovy 对象的一些不同的方式。应该选择的选项取决于如何在应用程序中使用 Groovy.还可以在同一个应用程序中结合使用已编译的和用脚本编写的 Groovy bean.实际上,如果希望的话,还可以在同一个应用程序中同时使用 Java、Groovy、JRuby 和 BeanShell bean,但我不建议这样做。作为开发人员,必须权衡在同一应用程序中使用多种语言的优点和缺点。