- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
Spring 是什么
如果你关注一下最近几年 Java 编程的发展,或许应该听说过 Spring Framework。Spring Framework 一个反转控制(Inversion of Control, IoC)容器,并集成了许多附加功能和模块。在某些方面,它确实只是一个 IoC 容器;而在另一些方面,它也是一个完整的应用程序开发平台(我们将在下一节再具体介绍这些概念的含义)。
Spring 最初由 Rod Johnson 在 2000 年创建,现在它已经发展成为有望代替 Enterprise Java Beans(EJB)的成熟框架。在 2000 年到 2004 年之间,Sun Microsystems 发布了一系列针对 EJB 的规范。原来如果不编写大量重复性代码,并且/或使用专有的工具来屏蔽底层技术,那么将很难理解、开发以及部署 EJB。Rod 创造性地编著了《Expert One-on-One J2EE Design and Development》(2002 年由 WROX 出版),这本书向广大开发人员介绍了如何用简单的 IoC 容器和一系列封装 API 来取代 EJB,而这些 API 可以将你的程序与 Sun 的底层 API 隔离开来。在 Spring 中不需要直接与 JDBC、JMS 或 JTA API 直接交互,而是应该使用 Spring 提供的各种模板类和辅助类。虽然 Sun 的核心企业 API 目前仍然很重要,但使用 Spring 的一个作用就是放宽了 Sun 在定义或提议的新库和应用上的限制。Spring 不是直接对 JDBC 或 JNDI 进行编程,而是在 Spring 容器内编写自己的代码进行操作,这样就不必了解实现持久化、消息传递以及其他处理时所使用的底层技术。作为打破 Sun 在 Java 界定制标准的垄断地位的一种尝试,Spring 并不是现在惟一的项目,但它无疑是最成功的。
你可能会写一些自己的持久化层对象来直接与 JDCB 交互,但是也可以使用 Oracle 某种定制的专有代码来实现一部分,而用 Hibernate 实现剩余的其他部分。Spring 通过提供一个神秘的 IoC 容器和一组有用的抽象,就可以支持这种选择。有关企业开发的讨论不再只是涉及 Sun 和 Java;Community Process(JCP)定制的各种标准;相反,Spring 通过提供一种公用的“总线”(bus),在此基础上可以构建大多数新的项目应用,从而让开发企业应用有了更多选择。以 Spring 与 Web 框架的集成为例:Wicket、Struts 2(原来的 WebWork)、Stripes、GWT 以及 Tapestry 都提供了与 Spring 的优秀集成,而 String 的文档也详细介绍了与 JavaServer Faces、Tapestry 以及 WebWork 的集成。Spring 也为各种对象关系映射(Object Relational Mapping)框架提供了方便的集成,包括 Hibernate、JDO、Oracle TopLink、iBatis SQL Maps 以及 JPA。Spring 作为一个平台,可以让开发人员“自由选择”各种实现,在一定程度上来说,现在几乎所有新的开源库或项目都必须支持 Spring Framework,才能让更多的开发人员愿意使用它。业内许多人士一致认为,虽然 Sun 可能会声称 Java 是一个“平台”,但它其实只是一种编程语言;而 Spring 才是一种真正的平台。当你读完本章以后,就会对 Spring 如何接管 Hibernate 的大量工作有所理解。
什么是反转控制
对于 IoC 还没有一个明确的定义,但比较集中的一个就是依赖注入(Dependency Injection)。在 Wikipedia 上有以下定义:
它是指一种模式,其中,对象创建和链接的控制由对象转移到了工厂。
作为一种轻量级容器,Spring 负责将一套组件集成在一起,通过 JavaBean 属性或构造参数注入依赖对象的实例。使用 Spring,你可以先开发一系列简单的对象,再告诉 Spring 怎么把它们串接起来以创建一个更大的系统。如果你的系统架构依赖的是可重用的“组件”,这样的实现方法就非常方便。在本章中,我们就用 Spring Application Context 将数据访问对象(Data Access Objects, DAO)实现为这种组件(或 bean),而示例类则通过 bean 的属性来依赖这些组件。如果想在其他系统中(例如命令行工具或 Web 应用程序)重用这些 DAO 类,那么系统可以按 bean 属性的形式来依赖同样的组件,Spring 会以一种描述程序结构的 XML 文档为基础,把各种组件都串接起来。
Spring 负责将一套功能集中的组件串接在一起,通过这种方法来促进组件的重用。你的 DAO 不必关心它们连接到什么组件,或是什么组件会使用它们;它们只是为依赖于它们的组件提供了一定的接口。如果你对依赖注入或反转控制的更多细节感兴趣,可以阅读一下 Martin Fowler 的《Inversion of Control Containers》和《Dependency Injection Pattern》( [1] )。
组合 Spring 和 Hibernate
现在你应该知道 Spring 是做什么用的了,我们回头再看看 Hibernate。本章集中介绍 DAO 模式、事务抽象以及 Spring Framework 提供的工具类。
你希望能从本章学到什么?虽然通过 Spring 来使用 Hibernate 相当直接,不过在我们可以真正利用 Spring 的 Hibernate 集成之前,还需要几步准备工作。首先,因为 Spring 是一个 IoC 容器,所以需要修改前几章的示例,以“串接”的方式来创建对象。我们在下一节才会研究 DAO 模式。在创建好 DAO 以后,将修改目前的这套示例,实现一个公共接口 Test,并为它应用一个 Transactional 标注。接着,为了创建 Spring 应用程序上下文,我们要编写一个 XML 文档,告诉 Spring 要创建什么对象以及和什么对象串接起来。最后,需要写一个命令行应用程序,用来加载 Spring 应用程序上下文和启动示例程序。
注意:介绍足够了,接下来看看代码吧。
添加 Spring 框架为项目依赖
为了在示例项目中使用 Spring,需要为构建过程再添加一个依赖。打开 build.xml,添加例 13-1 中用粗体突出显示的依赖。
例 13-1:添加 Spring 依赖
<artifact:dependencies pathId="dependency.class.path">
<dependency groupId="hsqldb"artifactId="hsqldb"version="1.8.0.7"/>
<dependency groupId="org.hibernate"artifactId="hibernate"version="3.2.4.sp1">
<exclusion groupId="javax.transaction"artifactId="jta"/>
</dependency>
<dependency groupId="org.hibernate"artifactId="hibernate-tools"version=
"3.2.0.beta9a"/>
<dependency groupId="org.hibernate"artifactId="hibernate-annotations"
version="3.3.0.ga"/>
<dependency groupId="org.hibernate"artifactId="hibernate-commons-annotations"
version="3.3.0.ga"/>
<dependency groupId="org.apache.geronimo.specs"artifactId="geronimo-
jta_1.1_spec"version="1.1"/>
<dependency groupId="log4j"artifactId="log4j"version="1.2.14"/>
<dependency groupId="org.springframework"artifactId="spring"version="2.5"/>
</artifact:dependencies>
很好,现运行 Ant build,就会看到 Maven Ant task 将从某个 Maven 仓库中下载 spring-2.5.jar。
[1] http://martinfowler.com/articles/injection.html.
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论