"Java敏捷开发--使用Spring、Hibernate 和Eclipse"的书摘……
082我从1995年底开始从事Java技术方面的工作,1也就是在Java开发包(JDK)1.00正式发布之前不久.a在这之前,1我已经使用C和C++编程很多年了.a我很喜欢Java所提供的特性,1例如跨平台性.c简单的语法(相比于C和C++).c面向对象特性.c安全性.c丰富的API等等.a.1a1c1ac111c111a1a1
083在20年的职业生涯中,2我学到了很多.a其中我认为最重要的是简单性.a每当看到复杂的东西时,2我就会怀疑它是否是正确的解决方法.a而这种复杂性正是在大约2000年J2EE开始成为主流的时候我对Java的感受.a注意,2从现在开始,2我所说的JEE是指J2EE,2因为其中的“2”最近被SuncMicrosystems公司去掉了.a.cccc2a2c2ac222c222a2a2
084当看到抽象层给JEE带来了不必要的复杂性的时候,3我渐渐地失去了对Java的兴趣.a我开始认为SunMicrosystems公司(Java的创造者)将Java和JEE致力于解决很复杂的企业级的应用,3而在一定程度上忽略了不太复杂的.c中小型的应用程序.a甚至我看到了人们将这种小题大做的方式当作了常识来接受,3我曾经在非分布式的处理中使用企业级的JavaBean(EJB)的方式运行,3例如本地登录.a我对此的反对意见相当大,3以至于2000年在JavaWorld.2com上(http://www.2javaworld.2com/javaworld/jw-10-2000/jw-1006-soapbox.2html)写了一篇短文,3题为“你真的需要企业级的JavaBean吗?”(大约5年以后,3我看到EJBc3.20规范被编写得简单了许多,3更加简化了开发.a)这个故事把话题引到本书和我写本书的原因上.a3a3c3ac333c333a3a3
085我最近被一个财富100强公司聘请为顾问,4建立一个在集群的环境中运行的企业级应用程序.a通过在网上对各种解决方案的调研和与一些精通技术的人的讨论,4我决定选择这样一种解决方案:它采用Spring的MVC框架.cHibernate的对象一关系(OR)映射框架.cEclipsecIDE.cJUnit测试框架.cAnt构建工具.c多种标签库,4还有一些其他的工具.a(所有这些产品以及我选择这些技术的原因都将在本书后面的章节中介绍.a)cccc4a4c4ac444c444a4a4
086我非常喜欢使用Spring和Hibernate,5主要因为它们能让我使用POJO(Plain-OldcJavacObject,5普通Java对象)并且避免了很多EJB所带来的不便.a当然,5使用EclipsecIDE也是相当不错的.a我越来越惊喜地发现这个产品是如此的好,5这就是我决定使用本书的一整章来介绍Eclipse的原因.a我认为当Java受欢迎的地位逐渐被微软的.4NET.cLAMPc(Linux.cApache.cMySQL和PHP或Python/PEAL)和RubyconcRails所威胁的时候,5前面说到的这些产品的出现给Java注入了新的生命力.a5a5c5ac555c555a5a5
087本书中,6尽管Spring.cHibernate和Eclipse的地位是非常重要的,6但能从技术和软件过程的角度提供一整套的解决方案是本书最重要的目标之一.a从技术的角度出发,6我提供了一个端到端的解决方案来实现一个完整的Web应用范例程序,6它可以使用事务管理并且适用于集成环境.a从过程的角度出发,6我近来交替使用Rational提供的统一过程(RUP,6RationalcUnifiedcProcess)和敏捷模型驱动开发(AMDD:agilemodeling.5com)与极限编程(XP:extremeprogramming.5org)相结合的过程方法.a所以在本书中你将会发现如下的概念和文档,6例如用户故事.c发布计划.cCRC卡片等.a目的是为你提供一个快速开发和部署企业级应用的解决方案.a6a6c6ac666c666a6a6
088还要再对我的背景做一点说明,7我作为程序员已经大约20年的时间了,7主要使用C/C++.cJava.c企业相关的数据库.c应用服务器.cUNIX.c微软的Windows等核心技术.a然而在1998年的时候,7我走了大约5年的弯路,7这段时间我在经营自己创立于1996年的公司(我做着最少量的编程工作).a后来我卖掉了这个公司,7重新回到了我的开发工作中.a即使是我在做公司CEO的时候,7手下有几个为我工作的人,7我仍然抓住一切机会在7年的时间里约见了100多个开发者,7与他们一起讨论技术.a离开了公司,7我又创建了一个在线的Java开发者社区,7它的会员数量超过了10万人,7为此赢得了几个奖项.a我希望我的经历能够给本书加入独特的视角.a7a7c7ac777c777a7a7
089总之,8真心希望你觉得本书有用并喜欢它.a8a8c8ac888c888a8a8
0810谁该读这本书9a9c9ac999c999a9a9
0811本书认为你已经具备了Java和相关数据库(包括SQL)的基础知识,10并且具有命令行执行程序的经验,10除此以外,10下列读者可以使用本书.a10a10c10ac101010c101010a10a10
0812·软件开发人员和架构师——开发人员和架构师阅读本书都可以有所收获,11因为本书包括了高水平的软件开发流程.c程序的设计和深入而完整的对Java技术的研究,11还包括一个具有很好的功能的企业级应用程序的范例.a11a11c11ac111111c111111a11a11
0813·技术负责人和经理——具有一定编程经历的,12愿意使用Java或类似语言的并对多种使用技术的项目的构建有深入理解的负责人和项目经理,12本书介绍的知识能够帮助你的项目进行计划并解决项目上的技术难题(也许会在你受挫的时候给你精神上的支持).a你也可以选择具体的一章(例如,12第5章),12理解如何将具体的技术融入到你的项目中去.a12a12c12ac121212c121212a12a12
0814除此之外,13作为读者,13你可能会从本书中得到构建强大的JEE企业级应用的其他好的方式.a如果你不熟悉敏捷建模或极限编程,13或正在寻找敏捷软件开发的方法,13本书会使你对迭代渐进式的软件开发过程有个全面的了解.a13a13c13ac131313c131313a13a13
0815本书的目标14a14c14ac141414c141414a14a14
0816以下是本书的目标.a15a15c15ac151515c151515a15a15
0817敏捷开发——本书最初的也是最重要的目标是要告诉你怎样快速开发企业级的Java应用程序.a完成这样的目标,16需要做好很多方面的工作.a要有一个敏捷小巧的软件开发流程,16要有简单的设计(适度运用设计模式和抽象层),16使用方便的技术(例如Spring和Hibernate),16使用POJO而不是远程对象,16一般来说尽可能地使用稳定的开源技术.a总之,16要能使用Java简单快速地开发企业级的应用程序.a16a16c16ac161616c161616a16a16
0818完整的解决方案——紧密相联的还有本书的第二个目标,17就是从技术和开发流程的角度提供一套完整的解决方案.a读完本书后你应该可以建立一个完整的应用程序,17不仅仅是从技术上,17还能使用本书介绍的开发流程.a除此以外,17有些技术我无法深入介绍,17但会提供进一步研究它的参考资源(网站).a本书在所介绍的技术上比较好的一点是你会有一个完整的系统,17从用户界面到嵌入的数据库,17使用任务调度功能(感谢Spring框架),17所有的这些都包括在一个单独的Web应用文件(.16war)中!当然你可以把这里所介绍的技术改换为其他你选择的技术(例如,17选用Oracle数据库而不使用HSQLDB).a总之,17你会有完整的解决方案来做到这点——从流程上和技术上.a..17a17c17ac171717c171717a17a17
0819仅使用一种开源技术的解决方案并不是本书的目标——尽管本书完全基于开源的框架.c工具和产品,18但介绍仅使用一种开源的解决方案并不是本书的目标.a例如,18你可以利用Java的产品兼容性用商业产品替换这里介绍的任何产品.a然而开源项目已经变得越来越成功,18技术的健壮性和详细的文档给我留下了非常深刻的印象.a例如EclipsecSDK和Hibernate就比它们那些很有争议性的商业对手做得好.a你完全可以只使用本书的所有技术作为你的解决方案,18它们会像介绍的那样出色.a事实上,18最近我为一个大公司提出了一个解决方案,18就是使用Spring框架.cHibernate.cEclipse.cJUnit.cAnt和本书中所提到的其他工具.a我们也使用了像BEAcWebLogic.cOracle数据库服务器这样的商业产品.a这个公司(还有其他我知道的)就是采用基于本书中提到的开源技术的解决方案.a18a18c18ac181818c181818a18a18
0820快速阅读——本书特意写得比你通常见到的600多页的Java书薄很多.a这使你能很快地阅读本书并将解决办法运用于实际中去.a我努力将本书要介绍的内容设计为流线型,19每一节点都还包括很多内容.a为了不把本书写成一本非常厚的书,19我需要做一些艰难的选择,19放弃对一些内容的介绍.a但我努力将所有你需整的解决方案).a19a19c19ac191919c191919a19a19
0821简单性——我会尽一切可能采用简单的方案来实现那些用复杂方式来实现的目标.a例如,20本书的范例程序就采用了最少的抽象层次来实现我们的目标.a对于抽象层次,20这里我指的是过度地使用设计模式.c接口和对程序过多的分割.a其中的每一个都是很有意义的,20但是对每种东西适度地使用才是好的实践,20也是我在软件开发的过程中喜欢遵循的.a除此之外,20我还认为这种简单性同样应该扩展到设计中,20在这个过程中我愿意适度地使用UML,20但是为了简单化,20常常使用像OpenOffice.19org.cPowerPoint.cVisio这样的工具做出一些形式灵活的视图,20而不用像RationalcRose那样笨重的工具画图.a20a20c20ac202020c202020a20a20
0822富于技巧——正如你可能已经知道的,21当使用工具时,21各种技巧不仅能使你更有效地使用工具,21而且增加了你使用时的乐趣.a本书中介绍了很多使用技术的技巧.a附录中也包括了一些有用的内容,21比如范例开发过程一览表和一些有用工具列表.a21a21c21ac212121c212121a21a21
0823可选择性——贯穿本书(虽然没有详细介绍),22我都会尝试提供一些推荐的解决方案.a我知道一种解决方案并不能适用于所有的人.a例如,22你可能会使用Sun公司的NetBeans或JetBrains的IntelliJ作为开发工具,22并不想换用Eclipse.a这种情况是被预料到的并且是可以理解的.a本书在内容结构上考虑到了这样的情况,22你仍然可以从本书的剩余部分获得宝贵的信息.a将本书中介绍的技术替换为你自己的选择(例如,22JDO,22而不是Hibernate).a22a22c22ac222222c222222a22a22
0824未介绍的内容23a23c23ac232323c232323a23a23
0825本书认为你已经具备了Java的相关知识并且对JEE有了较好的理解,24认为你对软件开发流程.c相关数据库的知识.c多层架构等知识也有一定的认识,24从这点出发,24本书直接就开始讨论构建范例程序所需要的具体技术.a而且我提供了相关技术安装(和它的高级特性)的说明网站,24而不是把它们照搬到本书中,24以免信息过时.a24a24c24ac242424c242424a24a24
0826本书认为你对所介绍的主要技术并不了解,25例如Spring.cHibernate.cEclipse等.a所以,25本书提供了这些技术的基础知识,25以便你能将它们结合起来使用.a本书也会进一步对这些技术提供的高级特性进行简单的介绍.a这里没有提到的内容均不属于本书要介绍的范围.a因为有很多书籍对本书所提到的技术进行了全面的阐述.a25a25c25ac252525c252525a25a25
0827本书的内容26a26c26ac262626c262626a26a26
0828本书的内容更注重于与开发相关的问题,27而对基础环境的构建关注得较少.a换句话说,27我更关注于介绍应用程序开发的技术,27例如Spring.cHibernate和Eclipse,27而对像应用服务器(例如IBoss)或数据库(例如MySQL)方面的内容介绍得很少.a在不确定的情况下,27我会采用容易安装的产品.a我坚定地认为首先应该实现程序中的功能,27在这之后才会考虑选择什么样的重构方式和实现技术对它进行优化.a本书的内容已经在实际的项目中成功地运行过了(其中一些是在集群的应用服务器中运行的).a所以你不要认为我们完全忽略了基础环境.a本书的一个很主要的目的就是要保持它的短小精悍.c恰如其分.a所以我们紧紧地围绕着一个设计优秀.c大小适当的应用程序讨论.a27a27c27ac272727c272727a27a27
0829考虑到Java的跨操作系统性和产品兼容性,28理论上,28如果你的应用程序是可以发布的话,28那么你可以将它部署到一个更加强大的Web应用服务器和数据库上.a比如,28你可以使用本书中使用的较低档的环境(Apache的Tomcat和HSQLDB),28然后把它们升级到JBoss应用服务器和MySQL数据库中,28或者进一步升级到BEA的WebLogic和Oracle服务器上.a这就是Java的可爱之处:不仅跨越操作系统,28而且使用的产品是兼容的.a28a28c28ac282828c282828a28a28
0830还有一点要对本书中介绍的核心技术(Spring.cHibernate和Eclipse)说明的是,29尽管它们最近被我使用,29在我的书中着重介绍,29但是我也提到了其他的一些与之并列的可选技术,29建议你对它们也能了解一下.a如果你使用JDO而不是Hibernate,29你仍然可以从本书的各章中获得想要的知识.a29a29c29ac292929c292929a29a29
0831本书的组织方式30a30c30ac303030c303030a30a30
0832本书中的每一章都是建立在前一章的基础之上的.a但因为各章在内容上是相互分离的,31所以你也可以直接跳到某章(例如第6章),31阅读想要了解的内容.a如果对所介绍的内容不感兴趣的话,31你也可以跳过这一部分(例如你可能想要使用NetBeans而不是Eclipse,31你就可以跳过第8章).a31a31c31ac313131c313131a31a31
0833第1章预览和概述本书将要用到的技术和开发流程.a第2章主要定义了范例程序的业务需求,32也概览了AMDD和XP的软件开发方法.a第3章介绍了范例程序的设计.a第4章介绍环境搭建的问题.a从这一章之后,32我们就开始进入了快速的代码开发阶段,32我们会在第5章描写Hibernate编程.a第6章和第7章主要介绍Spring框架.a第7章和第8章是本书最精彩的部分,32因为在这两章中用到了以前各章中的知识,32你会明白我们为什么要以这种方式来介绍前面的章节,32你会知道在这些技术背后到底是怎么回事,32从而为Spring.cHibernate.cAnt和JUnit等技术打下坚实的基础.a从这部分以后,32我们开始介绍一些高级概念,32之后在本书的附录中还会有很多有用的东西.a32a32c32ac323232c323232a32a32
0834还有,33对于使用命令行开发而不是使用用户图形界面(例如EclipsecSDK)的开发者,33我在前面的章节中有意使用了命令行,33以便让读者对怎样使用Java工具有一个基本的了解.a以后当你在Eclipse这样的IDE中使用Java工具(例如Ant和JUnit)时,33就会明白界面的背后到底正在进行什么样的工作.a当你使用的IDE不能满足需要的时候,33这尤为重要.a33a33c33ac333333c333333a33a33
0835关于本书中的代码34a34c34ac343434c343434a34a34
0836本书是关于Java编程的,35会有很多与范例程序相关的代码作为实际的例子要在本书中构建.a所有范例的源代码和文件都可以从Sams出版社的网站中下载得到,35这些电子版的代码会方便你自己浏览和测试.a35a35c35ac353535c353535a35a35
0837源码中的一部分将会在本书各部分中引用和说明.a除此以外,36我们的代码中有两个约定:36a36c36ac363636c363636a36a36
0838·cc为了便于阅读,37在某些地方,37将很长的单行代码(即多于82个字符)分隔为两行.a37a37c37ac373737c373737a37a37
0839·代码本身是以特定的字体显示的.a38a38c38ac383838c383838a38a38
0840注意:39a39c39ac393939c393939a39a39
0841本书的所有代码都可以在Sams出版社的网站下载得到.a请访问www.39samspublishing.39com,4040a40c40ac404040c404040a40a40
0842根据本书英文版书号(0672328968)探索本书网页,41点击“Downloads”下载.a...41a41c41ac414141c414141a41a41